Func为5个参数

ama*_*eur 1 c# delegates func .net-3.5

我正在使用System.Func但是已经遇到了绊脚石.

System.Func<TReturn> // (no arg, with return value)
System.Func<T, TReturn> // (1 arg, with return value)
System.Func<T1, T2, TReturn> // (2 arg, with return value)
System.Func<T1, T2, T3, TReturn> // (3 arg, with return value)
System.Func<T1, T2, T3, T4, TReturn> // (4 arg, with return value)
Run Code Online (Sandbox Code Playgroud)

它接受的最大值是4个参数.

有没有办法将此扩展到5个参数?

Bri*_*ian 9

转到更高版本的.NET框架.例如,.NET 4.0最多可达16个

http://msdn.microsoft.com/en-us/library/yxcx7skw.aspx

而3.5只有4

http://msdn.microsoft.com/en-us/library/yxcx7skw(v=VS.90).aspx

或者,如果你陷入较低版本,只需自己定义代理.

  • 我不想看到实际使用带有16个参数的委托的代码;) (5认同)
  • @Niall:你需要的语法是`public delegate TResult Func <T1,T2,T3,T4,T5,TResult>(T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5);`等等 (2认同)

Run*_* FS 5

您有几个选项可以定义您自己的委托,如下所示:

public delegate TResult Func<T1,T2,...,TN,TResult>(T1 arg1, T2 arg2,...,TN argN); 
Run Code Online (Sandbox Code Playgroud)

你基本上可以为任意数量的参数定义它(高于4,因为你可能会得到一个名字冲突)

或者您可以将您的参数包装到某种结构中,以便您可以使用已为您定义的Func委托之一.

在任何情况下,如果您不能使用其中一个预定义的Func委托,则应该担心方法签名.通常很长的参数列表是一种气味,通常会让您意识到该方法正在做很多(不相关的)工作.

因此,我个人的方法是弄清楚设计失败的地方并纠正它而不是纠正最常见的症状(在这种情况下定义具有足够的agruments的Func 可能会修复症状而不是因为我没有知道你的代码)