2009-09-10 8 views
1

Je les classes suivantes définies pour faire la validation:Comment lancer cette interface générique?

public class DefValidator : IValidate<IDef> 
{ 
} 

public interface IDef : IAttribute 
{ 
} 

Ensuite, j'ai une liste de validateurs définie comme ceci:

IList<IValidate<IAttribute>> ValidationObjects; 

Quand j'essayez ce qui suit, il ne compile pas dire il ne peut pas convertir les types. Lorsque j'essaie ce qui suit, il compile mais génère une exception disant "impossible de lancer l'objet".

ValidationObjects.Add((IValidate<IAttribute>)defv); 

Des idées?

Répondre

1

Ceci est une question subtile à faire avec et co contravariance dans les génériques; il y a beaucoup d'exemples plus simples de ceci sur SO. Essentiellement, les types dans les génériques doivent correspondre exactement pour être compatibles, ils ne peuvent pas être des sous-classes ou des superclasses.

Pour le compiler, ValidationObjects doit être IList < IValidate <IDEF> >, ou DefValidator doit hériter de IValidate <IAttribute>

Questions connexes