2014-07-19 21 views
5

Czy mogę utworzyć słownik, w którym typ klucza ma charakter ogólny?Czy mogę użyć klucza ogólnego jako klucza?

np.

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

'typeof (T)' 'dostanie Type' reprezentującą' T'. –

+0

Dzięki ta.speot. Wzdłuż podobnej linii, czy mógłbym przekazać klasę jako parametr? Zamiast przekazywania instancji klasy jako parametru? – Ginger

+1

@Ginger można przekazać instace klasy 'Type', którą można uzyskać za pomocą metody' typeof' –

Odpowiedz

3

Co z tym?

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

Zastosowanie:

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

Ty mógł przejść typu exlicity przedmiotu:

AddKey<BaseClass>(derriveredInstance); 

Następnie słownika jest typu Dictionary<Type, object>

Wadą: Nie możesz przekazać insta nce innych (nie podstawy, czy nie tak samo) klasy jako klucz:

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

Jeśli chcesz osiągnąć coś takiego, należy zapoznać się z innych odpowiedzi i przekazać Type lub przekazać object jako typ wartości.

1

Wystarczy podsumować komentarze:

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

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

i można go używać tak:

AddKey(typeof(string), new Object()); 
Powiązane problemy