What is wrong with this?
interface IRepository<out T> where T : IBusinessEntity
{
IQueryable<T> GetAll();
void Save(T t);
void Delete(T t);
}
It says:
Invalid variance: The type parameter 'T' must be contravariantly valid on 'MyNamespace.IRepository.Delete(T)'. 'T' is covariant.
Consider what would happen if the compiler allowed that:
And you just tried to grow hair on a fish.
The "out" means "T is only used in output positions". You are using it in an input position.