ラムダ式への道 その4 到着
アクションとファンクション
.Net Frameworkのライブラリにあらかじめ用意されているdelegateにアクション(Action)とファンクション(Func)があります。
それぞれこんな感じで使用します。
class SomeClass { private Func<int, string> _someFunction; public SomeClass(Func<int, string> function) { _someFunction = function; } public string DoSomething(int value) { return _someFunction(value); } } class Program { static void Main(string[] args) { var some = new SomeClass((v) => (v * v).ToString()); var value = 10; Console.WriteLine(some.DoSomething(value)); } }
前回のサンプルコードのdelegate宣言をFuncに置き換えました。Func<int, string>でintが引数型、stringが返却型の関数を表しています。
引数が無い場合は
Funcnow = () => DateTime.Now.ToString(); var s = now();
引数部分を()と書いた後にラムダ演算子になります。
先のプログラムをActionを使用する形に変更してみます
class SomeClass { private Action_someAction; public SomeClass(Action action) { _someAction = action; } public void DoSomething(int value) { _someAction(value); } } class Program { static void Main(string[] args) { var some = new SomeClass((v) => Console.WriteLine((v * v).ToString())); var value = 10; some.DoSomething(value); } }
アクション、ファンクションは引数が4つまで用意されています。 また引数にC# 7.0で導入されたタプルを使用できるので、それを引数に利用するとdelegateを 新たに作成する必要はほどんどないかと思います。