我正在创建一个可以存储任何类型数据的容器。要从容器获取数据,我可以使用以下方法:AnyTypeResult<T> Get<T>(string name)
-从注册为“名称”的容器数据返回并将其强制转换为T。业务逻辑要求,当我们将数据作为DerivedClass的GenericType添加到容器时,可以将其作为BaseClass的GenericType获取。最好的方法是什么?
相同的问题是,当我们要将List<B>
强制转换为List<A>
时。可以做女巫Linq扩展方法Cast<T>
public class A {}
public class B : A {}
public class C<T> {}
var a = new C<A>();
var b = new C<B>();
var x = (C<A>)b; // cannot convert type
[GenericClass<DerivedClass>
和GenericType<BaseClass>
以及GenericClass<>
开放类型的两种截然不同的封闭构造类型,它们彼此都不继承。
因此,即使Class<B>
继承自Class<A>
,也无法将B
强制转换为A
。>
就像您要求投射此内容:
class A2 : A1; class B2 : B1; var b2 = new A2; var b2 = new B2; var v = (a1)b2;
[
GenericClass<DerivedClass>
和GenericType<BaseClass>
与A2
和B2
相同。
但是它们都是object
。