Ich bin gespannt auf die Unterschiede zwischen dem direkten Aufrufen eines Func und der Verwendung von Invoke (). Ist da ein Unterschied ? Ist der erste syntaktische Zucker und ruft Invoke () trotzdem darunter auf?
public T DoWork<T>(Func<T> method)
{
return (T)method.Invoke();
}
vs.
public T DoWork<T>(Func<T> method)
{
return (T)method();
}
Oder bin ich ganz auf dem falschen Weg :) Danke.
Antworten:
Es gibt überhaupt keinen Unterschied. Die zweite ist nur eine Abkürzung für
Invoke
, die vom Compiler bereitgestellt wird. Sie kompilieren zu derselben IL.quelle
(T)method
anstatt(T)method()
.foo()
undfoo.Invoke()
wofoo
eine Variable eines Delegatentyps ist. Das andere Problem ist, dass die Antwort zu sprechen scheintControl.Invoke
, was nicht dasselbe ist, alsInvoke
einen Delegierten anzurufen.Invoke
, wieGetAction()()
seltsam aussieht, aber inGetAction().Invoke()
Ordnung aussieht. Aber es macht mir größtenteils nichts aus.Invoke funktioniert gut mit dem neuen C # 6-Nullpropagationsoperator. Jetzt können Sie dies tun
anstatt
T result = method != null ? method() : null;
quelle
+=
. Wenn Sie also ein Ereignis auslösen und nicht wissen, ob Abonnements vorhanden sind, können Sie es kurz anrufen?.Invoke(...)
.