如何转换AnyClassAnyClass< BaseClassOfT>隐式/不重新创建对象
本文关键字:AnyClass 隐式 创建对象 BaseClassOfT 何转换 转换 | 更新日期: 2023-09-27 17:54:24
我有一个上下文,我不知道我的viewModel的具体类型是什么,但是,我有一个viewModels的基本类型。
如何在不重新创建对象的情况下将SomeClass<T>
转换为SomeClass<BaseOfT>
?
我的SomeClass
签名是SomeClass<T> where T : BaseOfT
当使用as
或隐式操作符时,将导致运行时错误(或在as
ofc的情况下产生null
)。
你不能。考虑下面的例子,它说明了为什么" A
是B
的子类型"并不意味着" T<A>
是T<B>
的子类型":
List<object> myListOfObjects = (List<object>)myListOfCats;
myListOfObjects.Add(new Dog());
但是,您可以通过在接口声明中使用out
泛型修饰符来创建协变接口:
ISomeInterface<BaseClassOfT> a = new SomeClass<T>();