gpt4 book ai didi

c# - 如何在 C# 中从派生类型获取泛型类型的泛型参数类型

转载 作者:太空狗 更新时间:2023-10-29 23:26:11 24 4
gpt4 key购买 nike

假设我有:

class MyBase<T1, T2>{}

class MyConcreteBase<T2> : MyBase<ConcreteType1, T2>{}

class MyConcrete1 : MyConcreteBase<ConcreteType2>{}

class MyConcrete2 : MyBase<ConcreteType1, ConcreteType2>{}

如何获取 T1 的类型和 T2如果我有 MyConcrete1 的实例或 MyConcrete2MyConcreteBase或从 MyBase<T1, T2> 派生的类型的任何其他实例

我现在的做法是使用 .GetType().BaseType 通过继承链“起床”同时BaseType.Name.StartsWith("MyBase")然后使用 .GetGenericArguments()

它正在工作,但我对它不满意,尤其是 .StartsWith("MyBase")部分。

还有其他建议吗?

最佳答案

您可以沿着继承层次结构向上走,寻找一个从 BaseType<,> 构建的 GenericType。 .尝试:

var type = c.GetType();
Type baseType = type;
while(null != (baseType = baseType.BaseType))
{
if (baseType.IsGenericType)
{
var generic = baseType.GetGenericTypeDefinition();
if (generic == typeof(MyBase<,>))
{
var genericTypes = baseType.GetGenericArguments();
// genericTypes has the type argument used to construct baseType.
break;
}
}
}

关于c# - 如何在 C# 中从派生类型获取泛型类型的泛型参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6178360/

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