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

本文关键字:最佳 方法 ROE 存储 | 更新日期: 2023-09-27 17:55:08

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

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

提前谢谢。请建议

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

通常我使用以下类的变体。

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;

因为我总是需要几秒钟来检查我是否应该乘以点或除法。

当我不得不使用外汇交叉盘(例如日元或欧元兑日元等)时,问题变得更加复杂,并且由于来自关闭外汇现货的字幕错误而浪费了数小时。

同样重要的是方程的量纲分析。当你把多个数字放在一起,你期望一个价格时,你确定你没有搞砸一个倍数/除法吗?通过为每个单元创建一个新类,你有更多的编译时错误检查,最终可以为你阅读的每一行代码节省几秒钟(在数千行库中,这将很快加起来几个小时)。

如果

不是,你的方法没有大问题

1)在内存数据库中使用一些自定义的第三方(类似Redis )。但可能会揭示对您的情况来说太麻烦了。

2) 从您的类型派生

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

因此,避免在代码中冗长而混乱的定义,并为您的代码阅读器和您自己。