105 votes

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

Je suis curieux de connaître les différences entre le fait d'appeler une Func<T> directement ou en utilisant Invoke() sur elle. Y a-t-il une différence ? Est-ce que le premier sucre syntaxique et les appels Invoke() en dessous de toute façon ?

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

vs.

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

Ou est-ce que je fais complètement fausse route ?

142voto

Jon Skeet Points 692016

Il n'y a pas de différence du tout. Le second est juste un raccourci pour Invoke fourni par le compilateur. Ils compilent dans le même IL.

26voto

sanjuro Points 474

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

T result = method?.Invoke();

au lieu de

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X