2009-09-10 21 views
1

我有以下类中定义做验证:如何投射这个通用界面?

public class DefValidator : IValidate<IDef> 
{ 
} 

public interface IDef : IAttribute 
{ 
} 

然后,我定义为这样的验证器的列表:

IList<IValidate<IAttribute>> ValidationObjects; 

当我尝试以下方法,它不会编译说它不能转换类型。

DefValidator defv = new DefValidator(); 
ValidationObjects.Add(defv); 

当我尝试以下操作时,它会编译但会生成一个异常,指出“无法投射对象”。

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

任何想法?

回答

1

这是一个微妙的问题做仿制药合作和逆变; SO上有很多简单的例子。基本上,泛型中的类型必须完全匹配才能兼容,它们不能是子类或超类。

为了得到它来编译,ValidationObjects必须IList的< IValidate <IDEF> >,或DefValidator需要继承关IValidate <IAttribute>