3 votes

Variance non valide : Le paramètre de type "T" doit être invariablement valide sur "xxx.IItem<T>.GetList()". T' est covariant

Pourquoi le code suivant génère-t-il une erreur ?

Variance non valide : Le paramètre de type "T" doit être invariablement valide sur 'UserQuery.IItem<T>.GetList()'. T' est covariant.

public interface IFoo {}
public interface IBar<T> where T : IFoo {}

public interface IItem<out T> where T: IFoo
{
    IEnumerable<IBar<T>> GetList();
}

9voto

Bartosz Points 2052

Les interfaces IBar y IItem ne sont pas d'accord sur la variance : dans votre IBar déclaration, le T n'est pas covariant, puisqu'il n'y a pas de out alors qu'en IITem le T est covariant.

0voto

dc7a9163d9 Points 2816

Le code suivant éliminera l'erreur.

public interface IFoo {}
public interface IBar<out T> where T : IFoo {}

public interface IItem<out T> where T: IFoo
{
    IEnumerable<IBar<T>> GetList();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X