gpt4 book ai didi

c# - 有没有办法在实例化从泛型继承的类型时不使用动态?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:14 24 4
gpt4 key购买 nike

如何创建一个继承自泛型的类型的实例,并将其静态转换为其基类型

foreach(Type t in x.ChildType.Assembly.GetTypes())
{
if (t.BaseType.IsGenericType)
{
if (t.BaseType.GetGenericTypeDefinition() == typeof(ClassMapExt<>))
{
if (t.BaseType.GetGenericArguments()[0] == x.ChildType)
{
// t is BonusMap. BonusMap is declared as:
// class BonusMap : ClassMapExt<Bonus>
dynamic bz = Activator.CreateInstance(t);

// the last line is analogous to:
// var bz = new BonusMap();

// statically casting it doesn't work
// var bz = (ClassMapExt<>) Activator.CreateInstance(t);

foreach (IManyToOneMappingProvider imt1 in bz.ExtReference)

最佳答案

通常这样做的方法是在其中包含一个非通用 API(可能有显式实现)。然后你只需转换到非通用接口(interface)。

不太一样,但有点像:

Type itemType = ...;
IList list = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(itemType));
list.Add(...);

关于c# - 有没有办法在实例化从泛型继承的类型时不使用动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com