c# with Crea una lista di tipo variabile




list c# library (3)

Sto cercando di creare un elenco di un certo tipo.

Voglio usare la notazione Elenco ma tutto ciò che so è un "System.Type"

Il tipo a have è variabile. Come posso creare un elenco di un tipo di variabile?

Voglio qualcosa di simile a questo codice.

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

Potresti usare Reflections, ecco un esempio:

    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[] {});

Grazie! Questo è stato un grande aiuto. Ecco la mia implementazione per Entity Framework:

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

Qualcosa del genere dovrebbe funzionare.

public IList createList(Type myType)
{
    Type genericListType = typeof(List<>).MakeGenericType(myType);
    return (IList)Activator.CreateInstance(genericListType);
}




list