2012-05-11 39 views
7

W moim kodzie chciałbym pracować z tekstowymi nazwami elementów, które są kodowane jako jeden symbol w pakietach.Jak korzystać Zmienić wartości słownika?

W zwykłej sytuacji 1012 oznaczałoby dla mnie 1012, ale jest o wiele więcej takich par, więc trudno jest je wszystkie zapamiętać. Czasem trzeba je zmienić, więc pomyślałem, że powinienem użyć do tego celu Dictionary<string, int>. Ale potem ...

switch (symbol) 
{ 
    case "0": { /* ... */ } 
    case "1": { /* ... */ } 
    case "2": { /* ... */ } 
    case "n": { /* ... */ } 
} 

... staje ...

switch (symbol) 
{ 
    case kvpDic["cat"]: { /* ... */ } 
    case kvpDic["dog"]: { /* ... */ } 
    case kvpDic["frog"]: { /* ... */ } 
    case kvpDic["something else"]: { /* ... */ } 
} 

i studio mówi, że trzeba używać stałych dla mojego przełącznika.

Jak to działa?

Upd: liczba takich zwierząt i ich pary wartości są znane dopiero w czasie pracy, więc kod nie może wykorzystywać stałe (chyba).

+0

Co robisz w blokach przełącznika? Zasadniczo * nie * będziecie mogli włączać wartości niestanowiących stałych, więc musicie wymyślić * jakąś * alternatywę. Jest wiele opcji, ale potrzebujemy więcej informacji. –

+3

Czy myślałeś o użyciu 'wyliczenia 'zamiast? A może zmieniają się wartości w czasie wykonywania? –

+0

Przypisuję Texture2D do nowego duszka i są one unikalne dla każdej sytuacji. – user1306322

Odpowiedz

15

Zamiast tego można zapisać plik Func<T> lub Action w słowniku.

var dict = new Dictionary<int, Action>(); 
dict.Add(1,() => doCatThing()); 
dict.Add(0,() => doDogThing()); 
dict.Add(2,() => doFrogThing()); 

Następnie użyj go tak:

var action = dict[1]; 
action(); 
+4

+1 dla słownika działania. Rzeczywiście wspaniałe połączenie;) – Sascha

+1

"Słownik akcji" po prostu brzmi świetnie. Brzmi jak coś, co słyszę w kreskówce dla dzieci. Nie obawiaj się, że Słownik akcji jest tutaj! – Servy

+0

@Servy: Brzmi jak coś, czego użyłbyś, by przestraszyć dzieci;) –

1

nie jest to ograniczenie VS, to ograniczenie język. Więc nie będziesz w stanie zrobić dokładnie tego, czego chcesz. Jednym z pomysłów byłoby użycie enum. Wyliczenie nie może użyć wartości char dla jej wpisów, spójrz na Why we can't have "char" enum types, aby uzyskać informacje na ten temat.

0

Chcesz użyć wyliczenia, a nie słownika.

enum AnimalsEnum { Dog, Cat, Bird, Fish }; 


public whathuh(AnimalsEnum whichAnimal) { 
switch(whichAnimal) { 
    case AnimalsEnum.Dog: 
    case AnimalsEnum.Cat: 
... 
} 

} 
Powiązane problemy