тип делегата Func<in T, out TResult>
явно в первый аргумент типа T
контравариантен. А «FUNC», который может принимать любой объект может также принимать в строке, так Func<object, X>
«является» Func<string, X>
, так что это контрвариантность в in
типа T
.
Вы пытаетесь пойти другим путем. Это будет работать, только если вам известно, что тип времени выполнения - это действительно Func<object, bool>
, и вам понадобится явный синтаксис броска, чтобы сообщить компилятору о ваших знаниях. Если тип времени выполнения неверен, явное преобразование не будет выполнено.
Действительный пример:
Func<object, bool> f1 = XXX;
Func<string, bool> f2 = f1; // OK, implicit
Func<object, bool> f3 = (Func<object, bool>)f2; // OK, explicit
+1. Классический. Использование интерфейсов будет работать, но у меня нет доступа к коду. Мне придется переделать мою логику. –
Вам не нужно использовать интерфейсы. У вас просто есть свои задания назад. 'Func