【问题标题】:Action delegate with more than four parameters (method arguments)具有四个以上参数(方法参数)的操作委托
【发布时间】:2009-09-11 19:58:15
【问题描述】:

我编写了一个辅助类,它使用 Action - 委托作为方法参数。
像这样:
public void SomeMethod(Action<T> methodToExecute, T argument);

根据 MSDN,您可以声明 max。动作委托的 4 个参数:Action<T1,T2,T3,T4>

现在我想调用一个需要 5 的方法!论据。我怎么能这样做?
最好的解决方案是我可以使用动态数量的方法参数。

谢谢

【问题讨论】:

  • 也许您应该考虑将其中一些参数分组为特定类型。
  • 确实如此。这不是很聪明。但情况是我不能引入一个新的类型左右。我必须提供接受 5 个或更多参数的此方法。

标签: c# delegates


【解决方案1】:

声明你需要的动作委托,它没有什么神奇之处:

public delegate void Action<T1, T2, T3, T4, T5>(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5);

【讨论】:

  • 当 .NET4 到达时,内置的 ActionFunc 代表将允许最多 16 个参数:msdn.microsoft.com/en-us/library/dd402872(VS.100).aspx
  • 很抱歉,以下方法签名无法编译:public static void Throws(Action methodToExecute, TFirst first, TSecond second, TThird 第三, TFourth 第四, TFifth 第五) where TException : System.Exception { /// some code } 它告诉我:“非泛型类型'System.Action'不能与输入参数。”
  • 您是否声明了具有五种泛型类型的 Action 委托?
  • 声明错误。打字很难;-) 现在它被接受了,我可以使用它了。无论如何,下次我需要例如6 参数我必须声明另一个新的代表,依此类推。我们怎样才能使它更灵活?
  • 在您的类库中定义所有这些委托,以便下次您需要它们时它们就在那里。不幸的是,.NET 或 C# 中的泛型无法处理无限数量的类型参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2015-07-27
相关资源
最近更新 更多