c#Reflection - 查找集合的通用类型

And*_*rke 21 c# reflection types properties

我正在反映一个属性'Blah',它的Type是ICollection

    public ICollection<string> Blah { get; set; }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var pi = GetType().GetProperty("Blah");
        MessageBox.Show(pi.PropertyType.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

这给了我(正如你所期待的那样!)ICollection<string>......

但我真的想要收集类型即ICollection(而不是ICollection<string>) - 有谁知道我该怎么做呢?

Jos*_*rke 32

例如,您需要查看GetGenericTypeDefinition:

   List<String> strings=new List<string>();


        Console.WriteLine(strings.GetType().GetGenericTypeDefinition());
        foreach (var t in strings.GetType().GetGenericArguments())
        {
            Console.WriteLine(t);

        }
Run Code Online (Sandbox Code Playgroud)

这将输出:

System.Collections.Generic.List`1 [T]
System.String

  • "GetGenericArguments"的+1.这实际上是我在这里降落时所寻找的. (4认同)

SLa*_*aks 22

你正在寻找GetGenericTypeDefinition方法:

MessageBox.Show(pi.PropertyType.GetGenericTypeDefinition().ToString());
Run Code Online (Sandbox Code Playgroud)