2012-05-11 26 views
7

在我的代碼中,我希望處理編碼爲包中一個符號的項目的文本名稱。如何使用字典值切換?

在通常情況下,1012對我來說意味着cat, dog, cat, frog,但還有更多這樣的對,所以很難記住所有這些對。有時候他們需要改變,所以我認爲我應該使用Dictionary<string, int>來達到這個目的。但後來......

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

... ...變得

​​

和工作室說我需要使用常量我的開關。

如何讓它工作?

UPD:如動物和他們的價值對數只在運行時已知的,因此代碼不能使用常量(我猜)。

+0

你在開關塊中做什麼?基本上你*不會*能夠打開非常量值,所以你需要考慮* some *選項。有各種選擇,但我們需要更多信息。 –

+3

你有沒有想過使用'enum'呢?或者在運行時更改值? –

+0

我將Texture2D分配給一個新的精靈,並且它們對於每種情況都是唯一的。 – user1306322

回答

15

您可以在字典中存儲Func<T>Action

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

然後,使用它像這樣:

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

用於Action字典的+1。確實是一個很好的組合;) – Sascha

+1

「動作詞典」聽起來很酷。聽起來像是我在兒童卡通裏聽到的東西。不要害怕動作詞典在這裏! – Servy

+0

@Servy:聽起來像是用來嚇唬孩子們的垃圾;) –

1

這不是VS限制,這是一個語言限制。所以你將無法做到你想要的。一個想法是使用枚舉。一個枚舉不能使用char值作爲它的條目,查看Why we can't have "char" enum types以獲取關於它的一些信息。

0

你想使用枚舉而不是字典。

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


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

}