4

パラメータがディクショナリ タイプの場合、アクションのデフォルト パラメータ値を設定するにはどうすればよいですか?

例えば:

public void Test(Dictionary<int, bool> dic) {
    ...
}
4

5 に答える 5

5

コンパイル時の定数値でなければならないため、希望する方法でデフォルト値を指定することはできませんが、次のようにすることができます。

private static bool Test(Dictionary<string, string> par = null)
    {
        if(par == null) par = GetMyDefaultValue();
        // Custom logic here
        return false;
    }
于 2013-10-01T08:05:33.997 に答える
1

参照型nullのデフォルト パラメータ値としてのみ使用できます。

デフォルト値は、次のタイプの式のいずれかである必要があります。

  • 定数式;

  • 形式の式new ValType()。ここで、は anや aValTypeなどの値の型です。enumstruct

  • 形式の式で、default(ValType)ValType値の型です。

MSDN

于 2013-10-01T08:02:21.987 に答える
0

メソッド シグネチャで default 以外を提供したいと仮定するnullと、この型でそれを行うことはできません。ただし、すぐに頭に浮かぶ 2 つの代替ソリューションがあります。

1、デフォルトでオプションのパラメーターを使用します。これはnullDictionaryおよび私が信じている以外の他のすべての参照型string)用である必要があり、それを処理するにはメソッド内にロジックが必要です:

public void Test(Dictionary<int, bool> dictionary = null)
{
    // Provide a default if null.
    if (dictionary == null)
        dictionary = new Dictionary<int, bool>();
}

または、私のやり方では、「昔ながらの」メソッドのオーバーロードを使用するだけです。これにより、議論を提供していない人と議論を提供している人を区別できますnull

public void Test()
{ 
    // Provide your default value here.
    Test(new Dictionary<int, bool>();
}

public void Test(Dictionary<int, bool> dictionary)
{

}

オプションのパラメーターは、いずれにせよオーバーロードされたメソッドにコンパイルされるため、意味的にはほとんど同じです。デフォルト値をどこで表現するかについての好みにすぎません。

于 2013-10-01T08:10:31.777 に答える
0

ディクショナリを NULL 以外に設定することはできません。たとえば、次のようにします。

public void Test(Dictionary<int, bool> dic = new Dictionary<string, string> { { "1", "true" }})または何でも、次のエラーが表示されます。

'dic' の既定のパラメーター値は、コンパイル時の定数でなければなりません。

その場合、NULLあなたの唯一の選択肢です。ただし、これを行うのは無意味です

public void Test(Dictionary<int, bool> dic = null)

最悪の場合、呼び出し元が新しいインスタンスをインスタンス化していない場合、受信dicはとにかく行われるため、デフォルトを追加する利点はありません。NULLNULL

于 2013-10-01T08:14:55.200 に答える