我正在尝试检查给定对象是否实现了我接受通用参数的接口。
public interface ICaseCopier<T> where T : ModelElement
{
T Case1 { get; set; }
T Case2 { get; set; }
void CopyCase(T caseToCopy, T copiedCase);
}
我的一个对象实现了这样的界面:
public class ProcessLoad : ElectricalLoad, ICaseCopier<ProcessCase>
其中ProcessCase是ModelElement的子级。我有许多对象在泛型中使用具有不同参数的接口,因此逐个检查它们是不可能的。
我试过的是:
ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;
但是我收到以下错误:
Cannot convert source type 'ICaseCopier<ProcessCase>' to target type 'ICaseCopier<ModelElement>'
ProcessCase可以转换为ModelElement。
答案 0 :(得分:5)
您无法执行此操作,因为转换不安全 - 如果您可以执行以下操作:
public class OtherElement : ModelElement { }
ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;
copier.Case1 = new OtherElement();
唯一可以做到这一点的方法是使ICaseCopier<T>
接口协变,当前T
出现在输入和输出位置时,您无法以当前形式执行此操作。