是Func一个特殊的委托或者我们也可以手动创建它

本文关键字:或者 我们 也可以 创建 一个 Func result | 更新日期: 2023-09-27 18:01:48

Func<T, TResult>委托是用于具有单个参数和返回类型的result的委托。

这是一个特殊的委托还是我们可以自己手动编写?

。我可以创建一个接受2个输入参数的Func<T, TResult>吗?

是Func<T, result >一个特殊的委托或者我们也可以手动创建它

"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

相关文章: