我很好奇直接调用Func与在其上使用Invoke()之间的区别。有区别吗?是第一个语法糖,并且在下面调用Invoke()吗?
public T DoWork<T>(Func<T> method)
{
return (T)method.Invoke();
}
与
public T DoWork<T>(Func<T> method)
{
return (T)method();
}
还是我完全走错了路:)谢谢。
Answers:
完全没有区别。第二个只是的简写Invoke
,由编译器提供。它们编译为相同的IL。
(T)method
而不是(T)method()
。
foo()
和foo.Invoke()
在那里foo
是一个代表类型的变量。另一个问题是答案似乎在谈论Control.Invoke
,这与调用Invoke
委托不同。
Invoke
,GetAction()()
看起来很奇怪,但是GetAction().Invoke()
看起来还可以。但在大多数情况下,我都不介意。
调用可以与新的C#6空传播运算符一起很好地工作,现在您可以
T result = method?.Invoke();
代替
T result = method != null ? method() : null;
+=
。因此,如果您要触发事件并且不知道是否有任何订阅,则简洁的解决方案是致电?.Invoke(...)
。