0

我正在尝试检查给定对象是否实现了我制作的采用通用参数的接口。

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。

4

1 回答 1

5

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

public class OtherElement : ModelElement { }

ICaseCopier<ModelElement> copier = this as ICaseCopier<ProcessCase>;
copier.Case1 = new OtherElement();

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

于 2013-02-19T19:03:11.567 回答