Sae*_*ani 2 c# ienumerable dictionary
我想在一个类中存储欧元硬币的直径,并使用该类中的方法来获得硬币的直径值(值).
首先,我不确定使用课程并在初始化时建立词典是一个好主意或不是,所以如果你知道一个更好的方法请现在就让我.
其次,我为这个类编写了这样的代码:
class EuroCoinSpecs
{
public Dictionary<double, decimal> CoinsDiameters;
public EuroCoinSpecs()
{
CoinsDiameters = new Dictionary<double, decimal>
{
{25.75, 2.00m},
{23.25, 1.00m},
{24.25, 0.50m},
{22.25, 0.20m},
{19.75, 0.10m},
{21.25, 0.05m},
{18.75, 0.02m},
{16.25, 0.01m}
};
}
public decimal GetValueForDiameter(double diameter)
{
return CoinsDiameters.FirstOrDefault(x => x.Key == diameter);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是GetValueForDiameter由于此错误导致代码无法编译:
Cannot implicitly convert type 'System.Collections.Generic.KeyValuePair<double,decimal>' to 'decimal'
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法,但它不想工作.可能是什么问题?
其他人已经开始使用FirstOrDefault- 但对我来说似乎毫无意义.为什么不使用你有一本字典的事实,该字典旨在为你执行密钥查找?
public decimal GetValueForDiameter(double diameter)
{
decimal ret;
// This will set ret to 0m if the key isn't found.
CoinsDiameters.TryGetValue(diameter, out ret);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
说完所有这些之后,我强烈建议您不要对这样的double值执行相等操作.在你给出的情况下它会工作正常,但是一旦你开始使用任何类型的算术,你最终可能会导致问题.