Вы объявили T
как ковариантный (используя ключевое слово out
), но вы не можете принимать ковариантные параметры:
(MSDN)
Как правило, параметр ковариантного типа можно использовать в качестве возвращаемого типа делегата, а параметры контравариантного типа можно использовать в качестве типов параметров. Для интерфейса параметры ковариантного типа могут использоваться в качестве возвращаемых типов методов интерфейса, а параметры контравариантного типа могут использоваться в качестве типов параметров методов интерфейса.
Func<T, bool>
принимает T
аргумент и возвращает bool
, нарушая это правило. Вы можете пометить его как контравариантный, но вы возвращаете T
в следующей функции.
Вы можете попытаться превзойти его, взяв два параметра типа (один ковариантный и один контравариантный), например:
interface IRepository<out T, in U> where T : BaseEntity
where U : BaseEntity
{
IEnumerable<T> Find(Expression<Func<U, bool>> predicate);
T FindById(Guid id);
}
Я серьезно сомневаюсь, что это то, что вы ищете, и я не уверен, что это даже скомпилируется/работает, но это может помочь.
person
BradleyDotNET
schedule
17.06.2014