我需要一种列表元素。
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
答案 0 :(得分:1)
语句var newList = (IList)Activator.CreateInstance((typeof(List<>).MakeGenericType(propertyList.PropertyType)));
创建一个包含list2
类型的通用List实例。因此newList
的类型为List<List<string>>
,因此您的结果是正确的。