- 追加された行はこの色です。
- 削除された行はこの色です。
&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()
--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()