是Func一个特殊的委托或者我们也可以手动创建它
本文关键字:或者 我们 也可以 创建 一个 Func result | 更新日期: 2023-09-27 18:01:48
Func<T, TResult>
委托是用于具有单个参数和返回类型的result的委托。
这是一个特殊的委托还是我们可以自己手动编写?
。我可以创建一个接受2个输入参数的Func<T, TResult>
吗?
"Func"
实际上是System
命名空间中的类族,即:
Func<TResult>
(0 params), Func<T,TResult>
(1 params), Func<T1,T2,TResult>
(2 params)…Func(17)
(16 params).
共有17个不同的"Func"类,支持0到16个参数。允许它们在代码中共享名称("Func"),即使它们实际上是不同类型的 (Func
, Func'
, Func''
等),这要感谢泛型在。net中的工作方式——泛型的编号决定/消除使用的实际类型的歧义。
幸福的编码。
至于委托之间的转换,这可能是有用的(在LINQPad中运行,"c#程序"):
delegate int MyDelegate (int y);
void Main()
{
Func<int,int> fun1 = (q) => q * q;
MyDelegate del = new MyDelegate(fun1); // Convert the "Func" delegate to custom...
Func<int,int> fun2 = new Func<int,int>(del); // ...and back
}
已经有这样做的Func<TParam1, TParam2, TResult>
。但是您所要求的有点不同(您知道这两个参数是相同的类型)。您仍然可以使用内置的Func两次使用相同的类型参数,但如果您真的想这样做,您可以这样做:
public delegate TResult MyFunc<T, TResult>(T param1, T param2);
已经有一个Func<T1, T2, TResult>
可以接受两个输入参数。
回答你的问题,不,与其他委托相比,它并不特别,你可以自己创建,但你为什么要这样做?
你不应该创建自己的Func。Func的重载最多可达16个参数。
http://msdn.microsoft.com/en-us/library/dd402862.aspx和它们之间的所有变化。实际上,前n-1个参数是输入,最后一个是返回值。
所以,Func<int,int,int,int>
比较了一个委托,它接受3个int参数并返回int