Func<T, TResult> デリゲートの呼び出し方をまとめてみた

きっかけ

非同期処理で利用するTaskクラスのコンストラクタを使って遊んでみようとしたところ、以下のメソッドが呼び出せなくて先に進めませんでした。

System.Threading.Tasks.Task.cs
public Task(Func<object, TResult> function, object state);

とても恥ずかしいですが、今後こんなことにならないようにするために、デリゲートの呼び出し方をまとめてみました。

本題

Funcデリゲートを呼び出す方法とその考え方をまとめてみました。
image.png

デリゲートと聞くと、ATフィールドが起動してしまいがちでしたが、よくよく見てみれば、メソッド定義と変わらないです。
逃げちゃダメですね。

上記を踏まえて、Taskクラスのコンストラクタはどう呼び出せるかメモしておきます。

Sample.cs
//一行で済ませる場合
new Task<int>((inParam) => { return 0; }, new object());

//Function定義とコンストラクタ呼び出しを分ける場合
Func<Object, int> pattern1 = ((inParam) =>
{
    return 0;
});
new Task<int>(pattern1, new object());

まとめ

ラムダ式に慣れていないうちは、Function定義を分けてかいたほうが混乱しなさそうです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.