Как объявить общий делегат с параметром out
Func<a, out b, bool>
, просто не компилируйте, как объявить, что я хочу, чтобы второй параметр был out
один?
Я хочу использовать его следующим образом:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
Ответы
Ответ 1
На самом деле, 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 bool MyFunc<T1, T2>(T1 a, out T2 b)
Ответ 2
Вам нужно создать свой собственный тип делегата, например:
delegate bool MyFunc(Type1 a, out Type2 b);
Ответ 3
Возможно, вы захотите переосмыслить свой дизайн. Вам действительно нужно усложнить свой код, добавив параметр out?
Вы можете обернуть тип возврата bool и второй тип в свой собственный класс (или .NET 4.0 Tuple) и использовать его как возвращаемый тип:
public Func<Type1, Tuple<Type2, bool>> DetectMethod;
Конечно, если вы хотите использовать делегаты для ссылки на методы try-parse, вы находитесь на правильном пути, и вам нужно будет определить новый делегат, как уже описывали другие.