创建变量类型列表

时间:2010-03-22 14:59:01

标签: c# list

我正在尝试创建某种类型的列表。

我想使用List表示法,但我所知道的只是一个“System.Type”

a类型是可变的。如何创建变量类型列表?

我想要与此代码类似的东西。

public IList createListOfMyType(Type myType)
{
     return new List<myType>();
}

3 个答案:

答案 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);
    }