在C#中存储ROE的最佳方式

时间:2014-03-31 07:09:47

标签: c#

我想保存对应不同基础货币的所有货币的汇率。什么是保存相同的最好和最有效的类型或结构。目前我正在使用

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

提前致谢。请建议

2 个答案:

答案 0 :(得分:0)

如果不是

,请不要发现您的方法存在严重问题
  

1)在内存DB(redis之类)中使用一些自定义第三方。但是你的案子可能会显得过于简洁。

     

2)派生自你的类型

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

因此,请避免在代码中使用冗长且令人困惑的定义,并为其带来更多语义 你的代码阅读器和你自己。

答案 1 :(得分: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类,然后为Money和FxSpot类创建+ - * /运算符,以便我可以安全地进行财务计算。

编辑:我的经验是,在金融系统工作时,我总是遇到像这样的代码的问题

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

因为我总是需要几秒钟才能检查是否应该增加现场或分数。

当我必须使用外汇交叉(例如JPYEUR或EURJPY等)时,问题变得更加复杂,并且来自近距离外汇点的字幕错误会导致时间损失。

同样重要的是方程的维数分析。当你将多个数字组合在一起并且期望价格时,你确定你没有弄乱多重/分数。通过为每个单元创建一个新类,您可以进行更多的编译时错误检查,最终可以为您读取的每行代码节省几秒钟(在数千行库中,这将非常快地加起来)。