如何隐式地将AnyClass <t>转换为AnyClass <baseclassoft> /无需重新创建对象

时间:2016-07-04 10:22:47

标签: c# generics casting implicit-conversion covariance

我有一个上下文,我不知道我的viewModel的具体类型是什么,但是,我有一个viewModel的基本类型。

如何在不重新创建对象的情况下将SomeClass<T>转换为SomeClass<BaseOfT>

我对SomeClass的签名是SomeClass<T> where T : BaseOfT

使用as或隐式运算符时,会导致运行时错误(或null ofc)时生成as

1 个答案:

答案 0 :(得分:1)

你不能。请考虑以下示例,其中显示了为什么&#34; AB&#34;的子类型。并不意味着&#34; T<A>T<B>&#34;的子类型:

List<object> myListOfObjects = (List<object>)myListOfCats;
myListOfObjects.Add(new Dog());

但是,您可以使用接口声明中的covariant interfaces创建out generic modifier

ISomeInterface<BaseClassOfT> a = new SomeClass<T>();