• ベストアンサー

.NET - 配列変数を省略可能の引数にする方法

お世話になっています。 .NETでのコーディングを行っています。 標記の件ですが、初めてなので .NETからなのか、もともとそうなのかは不明なのですが、 プロシージャの引数をOptionalで宣言すると、 省略された時の値を設定する必要がありますよね。 省略可能の引数を配列変数にしたい場合、どのように宣言したら良いのでしょうか? 初期値って言っても、今回省略可能にしたい変数は、 検索結果を格納するための変数ですので、 省略されたときには何の値も入っていなくて良いんです。 宣言部分は以下のとおりです。 Public Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _ ByRef Wstr_WeekNm() As String, _ ByRef Wstr_WeekNmR() As String) As Boolean この、Wstr_WeekNmR()を省略可能にしたいのです。 このような場合、どうやって宣言するべきなのでしょうか? ヘルプを見たのですが、よくわからなくて・・・(;_;) 念のため、省略された時に、何らかの値を設定する方法も知りたいです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか? そうですね、呼び出し元のコピー(ByVal)でなく、呼び出し元で渡した変数自身を直接変更するということです。 >取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。 そういう場合は、 引数が3つある関数と2つある関数と2つ作っておけば、いいような気がします。 あるいは、 #3の方の言われる様に(註:ByRefでいいです) Optional ByRef Wstr_WeekNmR() As String = Nothing optional指定をした場合は、配列の場合nothingしか指定できません。 (なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません) そして、Wstr_WeekNmR is Nothingで省略されたかどうか調べればいいですね。

saeyui
質問者

お礼

>(なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません) なるほどです(笑) 今回はNothingでOKですので、希望どおりのことが出来ました。 とても勉強になりました。ありがとうございました。

その他の回答 (4)

回答No.5

#1です 下記の方法ではいけないのですか? コーディング上でインテリセンスも出てきますのでスマートだと思いますが... <既存のメソッドに「Overloads」を加える> Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _ ByRef Wstr_WeekNm() As String, _ ByRef Wstr_WeekNmR() As String) As Boolean <新規メソッドを追加する。既存のメソッドにスルーするように作成する> Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _ ByRef Wstr_WeekNm() As String) As Boolean   Return CM_fun_b_Get_WeekdayNm(Wstr_WeekKb, Wstr_WeekNm, Nothing) End Function

saeyui
質問者

お礼

すみません!! お礼をしたつもりがすっかり抜けてしまっていました(T.T) Overloadsをヘルプで読んだのですが、あんまりよくわからなくて・・・_(^^;)ゞ 教えてもらったソースを読んで、しっかり理解したいと思います。ありがとうございました。

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.3

省略したい引数のところだけ Optional ByVal 引数() As String = Nothing > 検索結果を格納するための変数ですので、 > 省略されたときには何の値も入っていなくて良いんです。 結果を返す必要がないときがあるというなら、上記の方法でOK。 配列のdefaultvalueはnothingしか指定できない ただし、配列の要素に値が入っていなくてもかまわないという理由で「省略可能」といっているなら、それは不可です

saeyui
質問者

お礼

有り難うございました。 おかげさまでエラーが出なくなりました。 なるほど。Nothingを指定するのですね。 一生懸命Nullを指定しようとしてました(^_^;) エラーになりますが・・・。 >配列のdefaultvalueはnothingしか指定できない なるほど。 ・・・まだまだVBの常識というものが 覚えきれていないことを認識しました。 とても勉強になりました。 有り難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>初期値って言っても、今回省略可能にしたい変数は、 >検索結果を格納するための変数ですので、 >省略されたときには何の値も入っていなくて良いんです。 配列変数は、参照型(ByRef)でないといけなくて、 しかも、それが、省略されることがある? そんなことありえないのでは?(<勘違いだったらすみません) 参照されるべきものが、省略されているとしたら、その参照されるべき実体は、どこにあるのか? 仮に、実体を呼び出された側で作ったとして 省略されているのに、呼び出し元では、どうやって格納される検索結果を呼び出すのか? とか、納得いきません。 少なくとも検索結果を格納すべき変数なら、省略できないと思います。

saeyui
質問者

お礼

説明不足で申し訳ありません。 ByRef、ByValの違いがあんまり理解できていませんので、もしかしたらこれは逆かもしれないです。(ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか?) そして検索結果を格納する変数についてですが、取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。 なので、最後の1個だけ省略可能にしたいのです。

回答No.1

Public Overloads Function

saeyui
質問者

お礼

早速のご回答ありがとうございました。 勉強してみます。

関連するQ&A