C#の匿名メソッドとラムダ式の違いについてお訊きしたいです。
現在、Xamarin.Androidでアプリを作っています。
アプリ内でダイアログを表示させて、OKボタンを押したときにとある処理を行う、匿名メソッド(delegate)を使ったこのような書き方がありました。
C#
1var alertDialog = new AlertDialog.Builder(activity); 2alertDialog.SetPositiveButton("OK", delegate { /* OKボタンを押したときの処理 */ });
※ここでのSetPositiveButtonの第2引数の型を確認すると、EventHandler<DialogClickEventArgs>
でした。
この匿名メソッドをラムダ式に置き換える。つまり、() => { /* OKボタンを押したときの処理 */ }
に書き換えたところ、エラーがでてしまいました。
仕方なく引数を2つ追加してみるとエラーが解消しました。
C#
1var alertDialog = new AlertDialog.Builder(activity); 2alertDialog.SetPositiveButton("OK", (sender, eventArgs) => { /* OKボタンを押したときの処理 */ });
匿名メソッドとラムダ式は同じものという認識だったのですが、なぜこのように匿名メソッドでは引数が不要で、ラムダ式では引数を指定しないといけないのでしょうか。
調べてみましたが、皆目検討がつかないためご存じの方がおりましたらお教えいただけるとありがたいです。
回答2件
あなたの回答
tips
プレビュー