C# 如何使用out参数声明泛型委托
C# 如何使用out参数声明泛型委托,c#,.net,generics,func,out,C#,.net,Generics,Func,Out,Func,只是不编译,如何声明第二个参数是out参数 我想这样使用它: public class Foo() { public Func<a, out b, bool> DetectMethod; } delegate bool MyFunc(Type1 a, out Type2 b); 公共类Foo() { 公共函数检测法; } 您需要创建自己的委托类型,如下所示: public class Foo() { public Func<a, ou
Func
,只是不编译,如何声明第二个参数是out
参数
我想这样使用它:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
delegate bool MyFunc(Type1 a, out Type2 b);
公共类Foo()
{
公共函数检测法;
}
您需要创建自己的委托类型,如下所示:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
delegate bool MyFunc(Type1 a, out Type2 b);
实际上,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 TResult Func<T1, T2, ... , T16, TResult>(T1 obj1, T2 obj2, ..., T16 obj16)
delegate TResult Func()
委托结果函数(T obj)
委托TResult Func(T1 obj1、T2 obj2)
委托结果函数(T1 obj1、T2 obj2、T3 obj3)
委托结果函数(T1 obj1、T2 obj2、T3 obj3、T4 obj4)
委托结果函数(T1 obj1、T2 obj2、…、T16 obj16)
因此,您只能声明自定义委托:
delegate bool MyFunc<T1, T2>(T1 a, out T2 b)
delegate bool MyFunc(T1 a,out T2 b)
您可能需要重新考虑您的设计。您真的需要通过添加out参数来使代码复杂化吗
您可以将bool返回类型和second out类型包装在它们自己的类(或.NET 4.0元组)中,并将其用作返回类型:
public Func<Type1, Tuple<Type2, bool>> DetectMethod;
公共函数检测方法;
当然,当您想使用委托引用try parse方法时,您的思路是正确的,您需要定义一个新的委托,就像前面所描述的其他委托一样。Yes。泛型
Func
委托是采用常规类型参数的常规泛型类型out b
不是一种类型。这也比带有ref或out参数的自定义委托更便于LINQ。