代码之家  ›  专栏  ›  技术社区  ›  Benny

如何用out参数声明泛型委托[duplicate]

  •  25
  • Benny  · 技术社区  · 14 年前

    这个问题已经有了答案:

    Func<a, out b, bool> ,只是不编译,如何声明我希望第二个参数是 out 一个?

    我想这样使用它:

     public class Foo()
     {
         public Func<a, out b, bool> DetectMethod;
     }
    
    3 回复  |  直到 12 年前
        1
  •  30
  •   Andrew Bezzub    14 年前

    实际上func只是在.net framework中声明的一个简单委托。实际上,这里声明了几个func委托:

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

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

    delegate bool MyFunc<T1, T2>(T1 a, out T2 b)
    
        2
  •  7
  •   SLaks    14 年前

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

    delegate bool MyFunc(Type1 a, out Type2 b);
    
        3
  •  5
  •   Steven    14 年前

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

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

    public Func<Type1, Tuple<Type2, bool>> DetectMethod;
    

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