2012-12-05 43 views
3

什麼是最好的方式來做類似於以下內容的ID傳遞給方法。是一個case語句好還是某種類似hashtable的集合更好?正確的方式來索引一小部分值

private string GetCurrencySymbol(string code) 
    { 
     switch (code) 
     { 
      case "USD": 
      case "AUD": 
      case "CAD": 
      case "NAD": 
      case "NZD": 
      case "SGD": 
      case "HKD": 
       return "$"; 
      case "GBP": 
       return "£"; 
      case "NOK": 
      case "DKK": 
      case "SEK": 
       return "kr"; 
      case "ZAR": 
       return "R"; 
      case "JPY": 
       return "¥"; 
      case "CHF": 
       return "CHF"; 
      case "EUR": 
       return "€"; 
      case "GHS": 
       return "¢"; 
      case "BWP": 
       return "P"; 
      case "INR": 
       return "₹"; 
      case "KES": 
       return "KSh"; 
      case "LSL": 
       return "L"; 
      case "MUR": 
       return "Rs"; 
      case "NGN": 
       return "₦"; 
      case "MWK": 
       return "MK"; 
      case "MZM": 
       return "MT"; 
      case "PKR": 
       return "Rs"; 
      case "PLN": 
       return "zł"; 
      case "SZL": 
       return "L"; 
      case "TZS": 
       return "Sh"; 
      case "UGX": 
       return "Sh"; 
      case "ZMK": 
       return "ZK"; 
      default: 
       return ""; 
     } 
    } 

這似乎聞到了一點?它沒有經常訪問,但看起來有點冗長。

+0

字典,集合是'key' ;-) – bonCodigo

回答

5

A switch聲明最終將被翻譯爲Dictionary。對於更復雜的例子(比如這個例子)來說,通常是有道理的。

Dictionary<string, string> currencyLookup = new Dictionary<string, string>(); 
currencyLookup["USD"] = "$"; 
//... 

string currency = currencyLookup["INR"]; 

一些使用字典的優點:

  1. 如果要定義所有的選項的文字,可以要求一點點更少的代碼。 (特別是在使用集合初始值設定項的情況下。)
  2. 您可以根據文件中的信息,數據庫或某些其他外部來源填充字典,以便不需要需要定義代碼中的所有映射。除了使代碼更清潔外,您還可以在不需要重新編譯程序的情況下添加/刪除/更改貨幣。
  3. 您可以訪問諸如ContainsKey之類的操作來知道某個特定鍵是否存在,而不是僅僅在沒有找到空字符串的情況下才返回(您仍然可以這樣做)。
+0

+1非常有用的答案,爲什麼字典更好的原因。 – Casperah

1

案例陳述對您來說非常完美。

1

你可以使用一個

Dictionary<String, char> 

,但你仍然需要設置映射將類似於。

如果這一系列的鍵/值不會改變,那麼使用case語句就沒有什麼問題了。如果偶爾從其他類訪問,則將其放在某個靜態實用程序類中。

+1

它需要是一個'Dictionary ',一些貨幣值是多字符。 – Servy

1

除非你要動態查找一個switch通常會至少打一個Dictionary(因爲編譯器將生成一個Dictionary,如果它認爲這將是更好的性能)

但是最重要的指標是可用性,你認爲代碼是可讀的目前的格式?

或者作爲一個附註,你可以使用別人的全球化方法爲你做這個特定的繁重工作嗎?

+1

我假設你的意思是'switch'而不是'select'? – Servy

1

字典類更好。你可以把它放在幫手裏。然而,由於它不經常使用,交換機並不壞。

1

使用List<>Dictionary<,>將總矯枉過正這樣一個簡單的應用程序,除非你希望用戶能夠配置貨幣(在這種情況下,我建議使用Dictionary<,> -class)。

對於像這樣的簡單功能,您的switchcase可以做得很好,即使它看起來很粗糙。

相關問題