如何投射此通用界面?

bsh*_*52s 1 c# generics casting

我定义了以下类来进行验证:

public class DefValidator : IValidate<IDef>
{
}

public interface IDef : IAttribute
{
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个定义如下的验证器列表:

IList<IValidate<IAttribute>> ValidationObjects;
Run Code Online (Sandbox Code Playgroud)

当我尝试以下内容时,它不会编译说它无法转换类型.

DefValidator defv = new DefValidator();
ValidationObjects.Add(defv);
Run Code Online (Sandbox Code Playgroud)

当我尝试以下操作时,它会编译但会生成一个异常,说"无法投射对象".

ValidationObjects.Add((IValidate<IAttribute>)defv);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Chr*_*ers 5

您的问题与协方差/逆变有关,请参阅如何在C#4.0中实现通用协方差和反差方法?