2009-09-10 19 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>