检查对象是否实现了具有泛型<;T>;其中泛型类型是T的子类型

本文关键字:gt 泛型类型 类型 lt 实现 是否 对象 泛型 检查 | 更新日期: 2023-09-27 18:00:05

我正在尝试检查给定的对象是否实现了我制作的带有泛型参数的接口。

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。

检查对象是否实现了具有泛型<;T>;其中泛型类型是T的子类型

您不能这样做,因为转换不安全-如果是这样,您可以执行以下操作:

public class OtherElement : ModelElement { }
ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;
copier.Case1 = new OtherElement();

唯一可以做到这一点的方法是使ICaseCopier<T>接口协变,这在其当前形式中是无法做到的,因为T同时出现在输入和输出位置。