在 C# 中存储 ROE 的最佳方法
本文关键字:最佳 方法 ROE 存储 | 更新日期: 2023-09-27 17:55:08
我想保存所有货币对应不同基础货币的汇率。保存相同内容的最佳和有效类型或结构是什么。目前我正在使用
Dictionary<string, Dictionary<string, decimal>>();
提前谢谢。请建议
通常我使用以下类的变体。
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>> {
}
因此,避免在代码中冗长而混乱的定义,并为您的代码阅读器和您自己。