&tag(CSharp/ラムダ式); *目次 [#b0d12cde] #contents *参考情報 [#z29ef949] *基本 [#s8da83a8] -ラムダ式をメソッドの引数などに指定することができる。 -ラムダ式を受ける側(メソッド定義)では、定義済みのデリゲートを使えば自分で1からデリゲートを定義する必要はない(自分で定義することももちろん可能)。 *サンプル [#lfb20173] **Actionのサンプル [#ib1db2ba] -定義済みActionを使ったサンプル。actionButton_Clicked→DoAction呼び出し。DoActionの中でラムダ式を使っている。 #pre{{ private void DoAction(Action action) { // 前処理 Debug.WriteLine("DoAction 開始"); // actionを差し替えることができる action(); // 後処理 Debug.WriteLine("DoAction 終了"); } private void actionButton_Clicked(object sender, RoutedEventArgs e) { // 引数部分 () => {} がラムダ式 DoAction(() => { Debug.WriteLine("Hello World!"); }); DoAction(() => { Debug.WriteLine("こんにちはセカイ!"); }); } }} -実行結果。メソッドDoActionの中の一部の処理を差し替えることができる。 #pre{{ DoAction 開始 Hello World! DoAction 終了 DoAction 開始 こんにちはセカイ! DoAction 終了 }} *定義済みデリゲート一覧 [#d9184517] -[[汎用的に使用できる定義済みのデリゲート型は?[C#、VB] − @IT:http://www.atmarkit.co.jp/fdotnet/dotnettips/730dlgttype/dlgttype.html]]より --void Action() --void Action<T>(T obj) --void Action<T1, T2>(T1 arg1, T2 arg2) --void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3) --void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4) --TResult Func<TResult>() --TResult Func<T, TResult>(T arg) --TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2) --TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3) --TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4) --int Comparison<T>(T x, T y) --TOutput Converter<TInput, TOutput>(TInput input) --bool Predicate<T>(T obj) --void MethodInvoker() *Tips [#r38e70df] **ラムダ式とデリゲートの違い [#u1822799] -[[Delegateの細かいこと - 奇想曲 in C#:http://d.hatena.ne.jp/toshi_m/20100717/1279368502]]