rksoftware

Visual Studio とか C# とかが好きです

【C#】 _ (アンダーバー) は 2 個から使えます

C# にはラムダ ディスカード パラメーターというすばらしい機能があります。

しかしこの機能、注意点があります。例えば次のコードはエラーになります。

System.Action<int, int> action = (_, _) => { var i = _; };

エラーの場所は = _;_ でエラー内容は次です。

エラー    CS0103  現在のコンテキストに '_' という名前は存在しません

引数を使わないという意図で _ を使ったのでこれは正しくうれしい挙動です。

引数を片方使いたくなったら?

残念なことになります。

System.Action<int, int> action = (_, j) => { var i = _; var k = j;  };

悲しいことにエラーになってくれません。 _ は C# では有効な変数名なので、これをエラーにしてしまうと過去のコードが何もしていないのにエラーになってしまうことがあり得ます。というか実際見過ごせない量であるでしょう。

そういう過去のコードを大事にしてくれるところが C# を好きなところの一つですが、今回のこれは少し悲しみがありますね。