gpt4 book ai didi

c# - 如何在 C# 中获取开放式泛型的类型参数数量

转载 作者:行者123 更新时间:2023-11-30 15:58:13 25 4
gpt4 key购买 nike

简而言之,这几乎可以解释我的问题......

class Foo<T> { ... }
var type = typeof(Foo<>); <-- runtime provides a RuntimeType object instance in my real code
var paramCount = ((RuntimeType)type).GetGenericParameters().Count; <-- I need this

问题当然是“RuntimeType”是(我相信)mscorlib 中的内部类型,所以我无法从我的代码中访问它。

还有其他/更好的方法吗?

更新:

我找到了一种“丑陋且可能不安全”的方法来基本上实现我的需要,但我确信这是一个坏主意(出于显而易见的原因)...

var paramCount = int.Parse(type.Name.Substring(t.Name.Length-1));

这是一个相当大的假设,而且感觉很糟糕。那就是说......我已经在反射(reflection)世界......所以它本质上是令人讨厌的。

当然有更好的方法来做到这一点?

最佳答案

如果您使用的是完整的 .NET,那么您可以简单地:

int num = type.GetGenericArguments().Length;

如果您使用的是 .NET Core,请参阅 https://stackoverflow.com/a/39140220/613130 :

TypeInfo typeInfo = type.GetTypeInfo();
int num = typeInfo.IsGenericTypeDefinition
? typeInfo.GenericTypeParameters.Length
: typeInfo.GenericTypeArguments.Length;

如果你总是有一个开放的泛型,那么很明显:

int num = type.GetTypeInfo().GenericTypeParameters.Length;

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

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