これは何?
C# の定義済デリゲート型である Action型の処理を定義する際に、今のC#ならラムダ式でサクって書けてしまえるんでめちゃ便利なわけですが、いつも「これって本来どんな書き方なんやっけ」ってつい気になって寄り道してしまうことを繰り返してしまうんで、将来の自分に向けたメモ書き。
引数を持たない Action型
// 「定義済のint型変数の値をインクリメントする」だけの処理をAction型変数に代入する
var num = 0;
// 1.delegateキーワードを使った古典的な書き方
Action action1 = delegate () { num++; };
// 2. var を使った書き方
var action2 = new Action(delegate () { num++; });
// 3. ラムダ式で書く
Action action3 = () => num++;
// 4. var を使った書き方
var action4 = new Action(() => num++);
まあ、3.の書き方が一番短く書けるんやけど、自分的には var って書きたいんで 4.
の書き方がいいかなー。
引数を1つ持つ Action型
// 例として「int型の引数の値をインクリメントする」だけの処理をAction<int>型変数に代入する
// 1.delegateキーワードを使った古典的な書き方
Action<int> action5 = delegate (int num) { num++; };
// 2. var を使った書き方
var action6 = new Action<int>(delegate (int num) { num++; });
// 3. ラムダ式で書く
Action<int> action7 = num => num++;
// 4. var を使った書き方
var action8 = new Action<int>(num => num++);
引数なしの時とまぁ、同じですね。
3. の書き方は引数のカッコを外せてしまうので、やっぱりちょっと違和感を感じてしまうのは僕だけでしょうか。
あとFunc型についても書こうかと思ったけど、まぁこれもほぼ同じですので省略します。