如何使用out参数声明generics委托

Func ,只是不编译,如何声明我想要第二个参数是一个?

我想像这样使用它:

  public class Foo() { public Func DetectMethod; } 

实际上,Func只是.NET Framework中声明的一个简单委托。 实际上有几个Func代表在那里宣布:

 delegate TResult Func() delegate TResult Func(T obj) delegate TResult Func(T1 obj1, T2 obj2) delegate TResult Func(T1 obj1, T2 obj2, T3 obj3) delegate TResult Func(T1 obj1, T2 obj2, T3 obj3, T4 obj4) 

所以你唯一能做的就是声明你的自定义委托:

 delegate bool MyFunc(T1 a, out T2 b) 

您需要创建自己的委托类型,如下所示:

 delegate bool MyFunc(Type1 a, out Type2 b); 

您可能想重新考虑您的设计。 您是否真的需要通过添加out参数来复杂化代码?

您可以将bool返回类型和第二个输出类型包装在它们自己的类(或.NET 4.0 Tuple)中,并将其用作返回类型:

 public Func> DetectMethod; 

当然,当您想要使用委托来引用try-parse方法时,您处于正确的轨道上,您需要像其他人已经描述的那样定义新的委托。