2014-03-31 116 views
0

我想要保存所有貨幣兌換不同基礎貨幣的匯率。什麼是最好的和有效的類型或結構來保存它們。目前我正在使用以C存儲ROE的最佳方式#

Dictionary<string, Dictionary<string, decimal>>(); 

在此先感謝。請建議

+0

看起來不錯,你有什麼問題嗎? – nvoigt

+0

只是尋找比詞典更好的選擇。 – Rohit

+0

請描述您的「更好」的指標。我傾向於在其他方面優化可讀性。 – Aron

回答

0

通常我使用以下類的變體。

public ForexSpotContainer : IEnumerable<FxSpot> 
{ 
    [DataMember] private readonly Dictionary<string, FxSpot> _fxSpots; 

    public FxSpot this[string baseCurrency, string quoteCurrency] 
    { 
     get 
     { 
      var baseCurrencySpot = _fxSpots[baseCurrency]; 
      var quoteCurrencySpot = _fxSpots[quoteCurrency]; 

      return baseCurrencySpot.Invert()*quoteCurrencySpot; 
     } 
    } 

    public IEnumerator<FxSpot> GetEnumerator() 
    { 
     return _fxSpots.Values.GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 

} 

我傾向於然後創建一個Money類和FxSpot類,然後創建+ - * /運營商的金錢和FxSpot類,這樣我可以做在一個安全的方式財務計算。

編輯:我我的經驗,在金融系統工作時,我一直與代碼問題這樣

decimal sharePriceOfMsft = 40.30m; 
decimal usdEur = 0.75m; 
decimal msftInEur = sharePriceOfMsft * usdEur; 

因爲它總是需要幾秒鐘,我要檢查,如果我要乘點或劃分。

當我必須使用ForexErosses(如JPYEUR或EURJPY等)時,問題會複雜化,並且小時數會由於接近外匯點的字幕錯誤而丟失。

另外,結果是方程的量綱分析。當你將多個數字拼湊在一起,並且你期望有一個價格時,你確定你沒有搞亂一個多重分割。通過爲每個單元創建一個新的類,您可以進行更多的編譯時錯誤檢查,最終可以爲讀取的每行代碼節省幾秒鐘的時間(在數千行庫中會快速添加幾個小時)。

+0

你能否向我解釋一下,我該如何使用它或者我會得到什麼好處。 – Rohit

0

看不出大問題,你的方法,如果不是

1)使用內存數據庫(一些定製的第三方redis等)。但對你的情況可能會顯得太複雜。

2)從你的類型

public class MyCustomHolder : Dictionary<string, Dictionary<string, decimal>> { 
} 

得出這樣避免在代碼冗長而混亂的定義,並帶來更多的語義 您的讀碼器和你自己。

+0

@Rohit:我已經在同一個 – Rohit

+1

上使用memcache:所以你的解決方案能讓你的案例更加靈活,並且擴展性好?所以你沒有問題。 – Tigran