デフォルト値が設定されているメソッドの呼び出しで、途中の引数は指定したくないけれど
後の引数だけ渡したい場合はないでしょうか?
そのようなオプション引数があるメソッドで、引数を自由に指定する方法を紹介します。
引数の渡し方
このようなオプション引数を持ってるメソッド呼び出すと仮定します。
public static void ArgTest(string str1, string str2 = "s2", string str3 = "s3") { Console.WriteLine("str1:" + str1 + ", str2:" + str2 + ", str3:" + str3); }
オプション引数とは
上のサンプルメソッド、ArgTest()の2番目・3番目の引数のように
デフォルト値を持っていて、呼び出す際には省略可能な引数のことです。
通常var
ArgTest("tex1"); ArgTest("tex1", "tex2", "tex3");
結果:
str1:tex1, str2:s2, str3:s3
str1:tex1, str2:tex2, str3:tex3
str1:tex1, str2:tex2, str3:tex3
正しく実行できました。
では、引数の1番目と3番目だけ渡して
2番目は省略したい場合どうすればよいでしょうか?
ArgTest("tex1", ,"tex3");
このように指定したくなりますが、コンパイルエラーです。

新米太郎
出来そうだけど、ダメなんだね、、、

新米先生
そうなんです。引数を省略することはできません。
ですが、後述する引数の順序を無視する方法を使えば
省略できます!
省略var
ArgTest("tex1",str3:"tex3");
結果:
str1:tex1, str2:s2, str3:tex3

新米太郎
これは上手くいきましたね!
メソッドで定義されている引数名:値
間の引数を省略する場合に、後の引数を上の様に指定すれば正しく実行できます。
これを使えば、引数の順序を無視して指定することも可能です。
ArgTest(str3:"tex3", str1:"tex1", str2: "tex2");
結果:
str1:tex1, str2:tex2, str3:tex3
最後に
いかがだったでしょうか。
今回はC#でメソッドを呼び出す際、途中の引数を省略する方法を紹介しました。
今後もC#の様々な使い方を紹介していきます!
コメント
C#で土日と祝日を除いた、平日の日数をラベルに表示される方法を教えて欲しいです。