如何将 AnyClass<T> 转换为 AnyClass<BaseClassOfT> implicitly/Without 重新创建对象

How can I convert AnyClass<T> to AnyClass<BaseClassOfT> implicitly/Without recreating an object

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

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

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

当使用 as 或隐式运算符时,它将导致运行时错误(或在 asofc 的情况下产生 null)。

你不能。考虑以下示例,它显示了为什么“AB 的子类型”并不意味着“T<A>T<B> 的子类型”:

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

但是,您可以在接口声明中创建 covariant interfaces by using the out generic modifier

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