1

情報を取得してクラスなどにデータを入力する関数がたくさんあります。これらは不完全な情報を喜んで受け入れ、かなり頻繁にデフォルト値を入力します。

これは大雑把な例です。

string name;
string address;
string phonenum;

void SaveClass(string a)
{
    SaveClass(a, "UNSET", "UNSET");
}

void SaveClass(string a, string b)
{
    SaveClass(a, b, "UNSET");
}

void SaveClass(string a, string b, string c)
{
    name = a;
    address = b;
    phonenum = c;
}

でも、こんなことができたら、すごくいいですよね。

void SaveClass(string a, optional string b="UNSET", optional string c="UNSET")
{
    name = a;
    address = b;
    phonenum = c;
}

このようにして、3 つのオーバーロードすべてを 1 回のクイック ゴーで書き出すことができました。このようなことはありますか?

助けてくれてありがとう。

4

2 に答える 2

2

C# 4 以降では、オプションのパラメーターを使用して正確に行うことができます。

void SaveClass(string a, string b = "UNSET", string c = "UNSET")

次に、メソッドを呼び出すときに、名前付き引数を指定できます。

SaveClass("Foo", c: "Some value for C");

または、順番に入力される位置引数を使用するだけです。

SaveClass("Foo", "Some value for B");

名前付き引数は、オプションのパラメーターを使用していない場合でも使用できます。これは、メソッド呼び出しに多くの引数があり、どれがどれであるかが明確でない場合に非常に役立ちます。

制限があります。オプションのパラメーターのデフォルト値は定数でなければならず、オプションのパラメーターは (paramsパラメーターを除いて) メソッド シグネチャの最後にある必要がありますが、すべての制限には正当な理由があります。

より多くのドキュメントを探す際に注意すべき点 - 機能はオプションのパラメーター名前付き引数として適切に知られていますが、多くの記事 ( MSDN 自体の一部を含む) では、「オプションの引数」や「名前付きパラメーター」についても説明されています。

于 2013-06-15T07:18:25.997 に答える
0

出来るよ。optionalパラメータからその部分を削除するだけです。

これらはオプションのパラメーターと呼ばれます。ここに、MSDN リンクがあります:オプションのパラメーター。

次のように使用します。

void MyFunc(string x, int y = 0)
{
    //do whatever
}

小さな注意: これは C# 4 以降であり、すべてのオプションの値は定数である必要があります。これは、コンパイラが実際にそれらをコンパイル済みコードに焼き付けるためです。本当に、それは単なる構文糖衣です。

于 2013-06-15T07:18:29.857 に答える