2014-07-19 8 views
5

Posso creare un dizionario, dove il tipo di chiave è un generico?Posso usare un generico come chiave?

ad es.

void addKey<T>(object value) 
{ 
    dic.add(T, value); 
} 
+3

'typeof (T)' otterrà un 'type' che rappresenta' T'. –

+0

Grazie ta.speot. Lungo una linea simile, potrei passare la classe come parametro? Piuttosto che passare un'istanza della classe come parametro? – Ginger

+1

@Ginger puoi passare un'istanza della classe 'Type', che puoi ottenere usando il metodo' typeof' –

risposta

3

E che dire?

void AddKey<T>(T value) 
{ 
    dic.Add(typeof(T), value); 
} 

Usage:

// the type of value is automatically detected based on usage 
AddKey("sampleString"); 

Si potrebbe passare tipo exlicity di corso:

AddKey<BaseClass>(derriveredInstance); 

Poi, dizionario è di tipo Dictionary<Type, object>

Lo svantaggio: Non è possibile passare insta nce di altri (non di base o meno lo stesso) di classe come la chiave:

AddKey<int>("some string"); // compile time error 

Se si vuole ottenere qualcosa di simile a questo, si dovrebbe dare un'occhiata a altre risposte e passare Type o passare object come tipo di valore.

1

Giusto per riassumere i commenti:

Dictionary<Type, object> dic = new Dictionary<Type, object>(); 

void AddKey(Type key,object value) 
{ 
    dic.Add(key, value); 
} 

e si può usare in questo modo:

AddKey(typeof(string), new Object()); 
Problemi correlati