2012-09-14 41 views
0

可能重複:
Creating a constant Dictionary in C#如何將查找方法使用的方法和字典組合起來?

我目前有:

public string GetRefStat(int pk) { 
     return RefStat[pk]; 
    } 
    private readonly Dictionary<int, int> RefStat = 
    new Dictionary<int, int> 
    { 
     {1,2}, 
     {2,3}, 
     {3,5} 
    }; 

這工作,但我用的是RefStat詞典唯一的一次是當它被GetRefStat調用。

有沒有一種方法可以結合方法和字典?

+0

那兩個都沒有組合成一個類了嗎? – prashanth

回答

0

是這樣的?

public string GetRefStat(int pk) 
{ 
    return new Dictionary<int, int> 
    { 
     {1,2}, 
     {2,3}, 
     {3,5} 
    }[pk]; 
} 
+0

爲每個查詢創建一個新的字典對象是一個可怕的想法。 – Asti

+0

對於類型實例來說,這樣的函數通常會被調用一次。所以它不會像你想象的那麼糟糕。 –

+0

典型? OP想要在一組數字之間進行編譯時定義的映射。你正在浪費週期對象實例化,哈希,創建桶和垃圾收集。 – Asti

0

是的,你可以在類型的構造函數中初始化字典。然後,您可以將方法GetRefStat更改爲屬性。因此,元代碼可能看起來像這樣

class Foo 
{ 
    public Dictionary<int, int> RefStat {get;private set;} 

    Foo() 
    { 
     RefStat = new Dictionary<int, int> 
     { 
      {1,2}, 
      {2,3}, 
      {3,5} 
     }; 
    } 
} 

和使用

Foo f = new Foo(); 
var item = f.RefStat[0] 
0

那麼你可以做一個擴展方法,然後將所有詞典可以使用該功能。我會認爲GetRefStat將超過簡單地從字典抓住一個值一鍵:

public static class DictionaryExtensions 
{ 
    public static TValue GetRefStat<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) 
    { 
     return dictionary[key]; 
    } 
} 

然後所有詞典可以把它想:

var dictionary = new Dictionary<int, int> 
    { 
     {1,2}, 
     {2,3}, 
     {3,5} 
    }; 
var value = dictionary.GetRefStat(2) 

如果這本字典是一堆常量,那麼這個答案是矯枉過正。只需使用if/elseswitch即可。

相關問題