web-dev-qa-db-fra.com

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

Je suis curieux de savoir les différences entre appeler un Func directement et utiliser Invoke () dessus. Y a-t-il une différence? Est-ce que le premier, le sucre syntaxique, et appelle Invoke () de toute façon?

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

contre

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

Ou suis-je complètement sur la mauvaise voie :) Merci.

71
tris

Il n'y a aucune différence. Le second n'est qu'un raccourci pour Invoke, fourni par le compilateur. Ils compilent vers le même IL.

97
Jon Skeet

Invoke fonctionne bien avec le nouvel opérateur de propagation nulle C # 6, maintenant vous pouvez le faire

T result = method?.Invoke();

au lieu de

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