从书中读取这行代码示例:
Func<string,int> returnLength;
returnLength = delegate (string text) { return text.Length; };
Console.WriteLine(returnLength("Hello"));
它说
Func<string,double,int>
等同于表单的委托类型public delegate int SomeDelegate(string arg1, double arg2)
那么Func
是代表吗?然后我们在代码示例中再次定义了什么代理?
我们从Func
定义一个类似于delegate
的变量,然后再将其分配给另一个delegate
?我非常困惑,无法理解这个概念。 :(
有人可以解释一下吗?
答案 0 :(得分:4)
所以Func
是委托人吗?
是的,它的定义如下:
public delegate TResult Func<in T, out TResult>(T arg)
它被描述为:
封装具有一个参数并返回值的方法
TResult
参数指定的类型。
阅读Func Delegate了解更多信息。
那么我们在代码示例中再次定义了什么代理?
这是我们创建的anonymous method,用于将其分配给Func
类型的变量。只要输入和返回类型与Func
泛型参数匹配,您也可以使用命名方法或lambda expression。
我们从Func定义一个类似委托的变量,然后再将其分配给另一个委托?
不,我们创建一个变量键入 Func<string, int>
,然后创建一个匹配该类型的委托并将其分配给变量。
来自MSDN的其他来源:
答案 1 :(得分:1)
你可以写的相同代码
Func<string,int> returnLength = (s) => {return s.Length;}
将委托分配给Func
就像将变量分配给另一个......
答案 2 :(得分:1)
您的代码也可以这样表达:
Func<string,int> returnLength = delegate (string text) { return text.Length; };
Console.WriteLine(returnLength("Hello"));
func是代表。
Func<string, int>
是声明,delegate (string text) { return text.Length; }
是您要分配的功能。
string text
)并返回一个整数(return text.Length;
)。这将返回5
作为text.Length of“Hello”为5.这不是因为你在这个例子中创建了2个委托,而是你只是分配一个。
答案 3 :(得分:1)
是的,Func
等同于具有返回类型的delegate
类型。您定义的delegate
是调用方法返回delegate
类型时执行的int
。
这可以快捷方式下载到
Func<string, int> returnLength = (text) => { return text.length; };
在这种情况下,委托返回值类型int(Int32)
现在,Action也是一个没有返回值的委托类型,例如。
Action<string> action = delegate(string text) { text = ""; };
或
Action<string> action = (text) => { text = ""; };
现在,匿名类型与delegate
,Action
或Func
大不相同。现在Func
&amp;代表们介绍后,{。}}在.Net 3.5中实施。