Как объявить универсального делегата с параметр [дубликат]

25
задан abatishchev 7 February 2012 в 14:28
поделиться

3 ответа

На самом деле, 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)
31
ответ дан 28 November 2019 в 21:05
поделиться

Вам нужно создать собственный тип делегата, например:

delegate bool MyFunc(Type1 a, out Type2 b);
7
ответ дан 28 November 2019 в 21:05
поделиться

Возможно, вы захотите переосмыслить свой дизайн. Вам действительно нужно усложнять код, добавляя выходной параметр?

Вы можете обернуть возвращаемый тип bool и второй выходной тип в их собственный класс (или .NET 4.0 Tuple) и использовать его как возвращаемый тип:

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

Конечно, когда вы хотите использовать делегаты для ссылки на методы try-parse, вы на правильном пути, и вам нужно будет определить новый делегат, как уже описывались другие.

6
ответ дан 28 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: