C# にはラムダ ディスカード パラメーターというすばらしい機能があります。
しかしこの機能、注意点があります。例えば次のコードはエラーになります。
System.Action<int, int> action = (_, _) => { var i = _; };
エラーの場所は = _;
の _
でエラー内容は次です。
エラー CS0103 現在のコンテキストに '_' という名前は存在しません
引数を使わないという意図で _
を使ったのでこれは正しくうれしい挙動です。
引数を片方使いたくなったら?
残念なことになります。
System.Action<int, int> action = (_, j) => { var i = _; var k = j; };
悲しいことにエラーになってくれません。
_
は C# では有効な変数名なので、これをエラーにしてしまうと過去のコードが何もしていないのにエラーになってしまうことがあり得ます。というか実際見過ごせない量であるでしょう。
そういう過去のコードを大事にしてくれるところが C# を好きなところの一つですが、今回のこれは少し悲しみがありますね。