&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]]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS