增加了什么值
<MyControl ServerData="@(new Func<TableState, Task<TableData<int>>>(ServerReload))">
与此相对:
<MyControl ServerData="@ServerReload">
处理程序所在位置:
private async Task<TableData<int>> ServerReload(TableState state) {...}
文档使用了第二种方法,而没有提及第一种方法。
没有"好处",因为没有区别。
以下全部编译:
var f1 = new Func<TableState, Task<TableData<int>>>(ServerReload));
Func<TableState, Task<TableData<int>>> f2 = ServerReload;
f2 = f1;
第二种形式只是自C#2以来可用的简写形式。但它是按照第一个长形式编译的,Func是一个委托,需要是new-ed。
您得到完全相同的IL代码,所以唯一的区别是可读性。当然,第二种简短形式是非常可取的。
在C#1中,你必须写:
MyDelegateType myDelegateVar = new MyDelegateType(MethodName);
从C#2开始,您可以编写与相同的内容
MyDelegateType myDelegateVar = MethodName;