Tengo curiosidad por las diferencias entre llamar a un Func directamente y usar Invoke () en él. Hay una diferencia ? ¿Es el primero, el azúcar sintáctico y las llamadas Invoke () debajo de todos modos?
public T DoWork<T>(Func<T> method)
{
return (T)method.Invoke();
}
vs
public T DoWork<T>(Func<T> method)
{
return (T)method();
}
O estoy completamente equivocado :) Gracias.
Respuestas:
No hay ninguna diferencia. El segundo es solo una abreviatura de
Invoke
, proporcionado por el compilador. Se compilan en el mismo IL.fuente
(T)method
lugar de hacerlo(T)method()
.foo()
yfoo.Invoke()
dóndefoo
es una variable de un tipo de delegado. El otro problema es que la respuesta parece estar hablandoControl.Invoke
, que no es lo mismo que llamarInvoke
a un delegado.Invoke
, ya que seGetAction()()
ve extraño, pero seGetAction().Invoke()
ve bien. Pero no me importa de ninguna manera, en su mayor parte.Invoke funciona bien con el nuevo operador de propagación nula de C # 6, ahora puede hacerlo
en vez de
T result = method != null ? method() : null;
fuente
+=
. Entonces, si va a disparar un evento y no sabe si hay alguna suscripción, la solución concisa es llamar?.Invoke(...)
.