C#从属性获取列表并获取其类型

时间:2014-01-17 22:19:37

标签: c# list types

我需要一种列表元素。

using System;
using System.Collections;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        var xClass = new XClass();
        xClass.Do();
    }
}

public class XClass
{
    public List<string> list1 = new List<string>();

    public List<string> list2 { get; set; }

    public void Do()
    {
       // first
        Console.WriteLine("Type = {0}", GetListType(list1));

        // second
        var propertyList = this.GetType().GetProperty("list2"); // i get list from reflection

        // Create instance of list2
        var newList = (IList)Activator.CreateInstance((typeof(List<>).MakeGenericType(propertyList.PropertyType))); 

        Console.WriteLine("Type = {0}", GetListType(newList));
    }

    private Type GetListType(IEnumerable list)
    {
        return list.GetType().GetGenericArguments()[0];
    }
}

输出:

Type = System.String

Type = System.Collections.Generic.List`1 [System.String]

我需要在第二种情况下获得“System.String”

您可以在此处测试代码http://ideone.com/uLkfBx

1 个答案:

答案 0 :(得分:1)

语句var newList = (IList)Activator.CreateInstance((typeof(List<>).MakeGenericType(propertyList.PropertyType)));创建一个包含list2类型的通用List实例。因此newList的类型为List<List<string>>,因此您的结果是正确的。