Cast GenericClass 到GenericType

问题描述 投票:0回答:1

我正在创建一个可以存储任何类型数据的容器。要从容器获取数据,我可以使用以下方法: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
c# generics casting base derived
1个回答
0
投票

[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>A2B2相同。

但是它们都是object

© www.soinside.com 2019 - 2024. All rights reserved.