我正在尝试创建某种类型的列表。
我想使用List表示法,但我所知道的只是一个“System.Type”
a类型是可变的。如何创建变量类型列表?
我想要与此代码类似的东西。
public IList createListOfMyType(Type myType)
{
return new List<myType>();
}
答案 0 :(得分:45)
这样的事情应该有效。
public IList createList(Type myType)
{
Type genericListType = typeof(List<>).MakeGenericType(myType);
return (IList)Activator.CreateInstance(genericListType);
}
答案 1 :(得分:17)
你可以使用Reflections,这是一个示例:
Type mytype = typeof (int);
Type listGenericType = typeof (List<>);
Type list = listGenericType.MakeGenericType(mytype);
ConstructorInfo ci = list.GetConstructor(new Type[] {});
List<int> listInt = (List<int>)ci.Invoke(new object[] {});
答案 2 :(得分:0)
谢谢!这是一个很大的帮助。这是我对实体框架的实现:
public System.Collections.IList TableData(string tableName, ref IList<string> errors)
{
System.Collections.IList results = null;
using (CRMEntities db = new CRMEntities())
{
Type T = db.GetType().GetProperties().Where(w => w.PropertyType.IsGenericType && w.PropertyType.GetGenericTypeDefinition() == typeof(System.Data.Entity.DbSet<>)).Select(s => s.PropertyType.GetGenericArguments()[0]).FirstOrDefault(f => f.Name == tableName);
try
{
results = Utils.CreateList(T);
if (T != null)
{
IQueryable qrySet = db.Set(T).AsQueryable();
foreach (var entry in qrySet)
{
results.Add(entry);
}
}
}
catch (Exception ex)
{
errors = Utils.ReadException(ex);
}
}
return results;
}
public static System.Collections.IList CreateList(Type myType)
{
Type genericListType = typeof(List<>).MakeGenericType(myType);
return (System.Collections.IList)Activator.CreateInstance(genericListType);
}