C# 如何获取C中打开泛型上的类型参数数#

C# 如何获取C中打开泛型上的类型参数数#,c#,generics,reflection,C#,Generics,Reflection,简言之,这很好地解释了我的问题 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 这是一个相当大的假设,只是感觉恶心。

简言之,这很好地解释了我的问题

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
这是一个相当大的假设,只是感觉恶心。 也就是说。。。我已经在这个世界上了。。。所以它的本质是令人讨厌的


当然有更好的方法可以做到这一点吗?

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

int num = type.GetGenericArguments().Length;
如果您使用的是.NET Core,请参阅:

如果您总是有一个开放的通用代码,那么显然:

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

@如果您使用的是完整的.NET,则
type.GetGenericArguments().Length将起作用。你不需要施法。
类型
变量应声明为
类型
<代码>运行时类型
是您可以忽略的内部内容。啊,很好。谢谢男人:)。。。只需要拉进系统。反射。。。是的,我认为这只是一个完整的.Net的东西。。。对Core不起作用
TypeInfo typeInfo = type.GetTypeInfo();
int num = typeInfo.IsGenericTypeDefinition
    ? typeInfo.GenericTypeParameters.Length
    : typeInfo.GenericTypeArguments.Length;
int num = type.GetTypeInfo().GenericTypeParameters.Length;