web-dev-qa-db-ja.com

Func <T>()vs Func <T> .Invoke()

Funcを直接呼び出すことと、それに対してInvoke()を使用することの違いに興味があります。違いはありますか?最初の構文上の糖であり、とにかくInvoke()を呼び出しますか?

public T DoWork<T>(Func<T> method)
{
    return (T)method.Invoke();
}

public T DoWork<T>(Func<T> method)
{
    return (T)method();
}

または、私は完全に間違った方向に進んでいます:)ありがとう。

71
tris

まったく違いはありません。 2番目は、コンパイラによって提供されるInvokeの省略形です。それらは同じILにコンパイルされます。

97
Jon Skeet

Invokeは新しいC#6 null伝播演算子でうまく機能します。

T result = method?.Invoke();

の代わりに

T result = method != null ? method() : null;
9
sanjuro