获取泛型类型参数的数量

Kov*_*xey 1 .net c# generics reflection

有没有办法获得未绑定泛型类型的参数数量?例如:

f(typeof(List<>))        => 1
f(typeof(Dictionary<,>)) => 2
Run Code Online (Sandbox Code Playgroud)

UPD

我知道从Type.Name获取数字,但也许有一种方法可以直接从Type获取

Lua*_*aan 7

您已经拥有泛型类型定义.您需要做的就是获取泛型类型参数:

Type.GetGenericArguments().Length
Run Code Online (Sandbox Code Playgroud)

编辑:

正如Sebastian所指出的,如果您习惯于处理C#,这可能会给您带来惊人的结果,因为C#隐藏了"继承"的泛型类型参数.例如:

void Main()
{
  typeof(A<>.Nested<>).GetGenericArguments().Dump();
}

public class A<T>
{
  public class Nested<V>
  {

  }
}
Run Code Online (Sandbox Code Playgroud)

会给你的{ typeof(T), typeof(V) }.这就是.NET类的实际情况 - 您需要如何引用它,如何通过反射创建它.

这只有在你特别试图用C#编译器对编译时未知的类做一些事情时才有意义; 这可能意味着您正在尝试生成C#代码.似乎没有任何支持的方式来获得C#安全的行为 - 你只需要使用真正的代码生成器而不是将字符串放在一起:)