2009-04-09 7 views
6

基本的には、オプションの辞書引数を持つ関数があります。これはオプションなので、デフォルト値が必要で、Nothingではなく空の辞書に設定したいと思います。それについてどうすればいいですか? JavaではVB.NETでオプションの引数の空の辞書を作成する方法

、私は単純にこれを行うだろう:

Collections.<K,V>emptyMap() 

私はVB.NETで同等のものをどのように行うのですか?

(私は.NET 3.5を使用しています)。

答えて

5

空のディクショナリをVB.Netのパラメータのデフォルト値として指定する方法はありません。 VB.NetはMetaDataでエンコード可能な値のみをサポートしており、辞書の新しいインスタンスを作成することはその1つではありません。

オプションは1つありますが、デフォルト値はNothingです。 Nothingの場合、空の辞書を作成します。例えば。

Public Sub SomeMethod(Optional ByVal map as Dictionary(Of Key,Value) = Nothing) 
    if map Is Nothing Then 
    map = new Dictionary(Of Key,Value) 
    ENd If 
    ... 
End Sub 
+0

ありがとう、これはまた私のために働いた...(ByRef myVar()Double = Nothingとして)。あなたの答えに何も書かれていない限り、私の配列のデフォルト値を指定する方法を考え出した。 – Stewbob

+0

作成された.NETディクショナリは、そのように作成された場合、変更可能であることに注意してください。 JDKのコレクションの結果。 emptyMap() 'は不変です。 – Nico

9

.NETにあらかじめ空の辞書がありません。空の辞書を作成するには、新しい辞書()に移動します。

しかし、コンパイル時に計算してDefaultValueAttributeに入れることができないため、これを省略可能な引数のデフォルト値として使用することはできません。その代わりに、関数のオーバーロードが必要になります:辞書引数を取るオーバーロードと、そうでないオーバーロードを必要とします。後者は上記のように空の辞書を新しく作成し、最初のオーバーロードを呼び出します。

0

意味ツーなる空の辞書が0の容量を使用して作成された場合は目的に応じて、それはもう少し省資源(すなわち、メモリの観点で)かもしれませんが:

var empty = new Dictionary<string, string>(0); 
関連する問題