2010-01-16 17 views
75

È possibile ottenere il seguente codice? So che non funziona, ma mi chiedo se c'è una soluzione alternativa?Creazione di un'istanza di tipo <T> generica con una variabile contenente il Tipo

Type k = typeof(double); 
List<k> lst = new List<k>(); 
+0

po 'confuso dal commento "questo può essere realizzato in C# 4.0." Non può, almeno non nel modo in cui lo mostri. C# 4 richiede ancora parametri di tipo generico da specificare al momento della compilazione; non è ancora possibile passare una variabile di tipo come parametro di tipo generico. – itowlson

+1

Si prega di esprimere le cose come una domanda quando si tratta di una domanda. Il codice specificato non può essere realizzato con C# 4.0. –

+1

Domanda simile: http://stackoverflow.com/questions/687363/how-do-i-create-a-generic-class-from-a-string-in-c –

risposta

112

Sì, c'è:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+0

Penso che questo sia quello che voglio. Fammi ricontrollare e segnerò il tuo come risposta momentanea. – Chris

+3

Penso che il problema principale qui sia che non descrivi quello che vuoi * noi *. Ci fai vedere un tentativo fallito di * qualcosa * e poi ti chiede come ottenere ciò che * vuoi *. Se vuoi delle risposte e non delle ipotesi, dovresti descrivere cosa devi fare, invece di come hai tentato di farlo. –

+0

Questo dovrebbe funzionare, grazie. – Chris

3

un modo più pulito potrebbe essere quella di utilizzare un metodo generico. Fare qualcosa di simile:

static void AddType<T>() 
    where T : DataObject 
{ 
    Indexes.Add(typeof(T), new Dictionary<int, T>()); 
} 
0

Prova questa:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+1

Grazie per aver preso il tempo di dare una risposta. È grazie a colleghi utili come te che siamo in grado di imparare insieme come comunità. Ecco alcuni suggerimenti su come migliorare la tua risposta: [Come scrivere una buona risposta] (https://stackoverflow.com/help/how-to-answer) – Brien

Problemi correlati