如何转换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)。

如何转换AnyClass<T>AnyClass< BaseClassOfT>隐式/不重新创建对象

你不能。考虑下面的例子,它说明了为什么" AB的子类型"并不意味着" T<A>T<B>的子类型":

List<object> myListOfObjects = (List<object>)myListOfCats;
myListOfObjects.Add(new Dog());
但是,您可以通过在接口声明中使用out泛型修饰符来创建协变接口:
ISomeInterface<BaseClassOfT> a = new SomeClass<T>();