我想将欧洲硬币的直径存储在一个类中,并使用该类中的一种方法通过其直径来获取硬币的价值(价值)。
首先,我不确定使用类并在初始化时构建其字典是否是一个好主意,所以如果您知道更好的方法,请现在让我来。
其次,我为此类编写了如下代码:
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);
}
}
问题是
GetValueForDiameter
中的代码由于此错误而无法编译:Cannot implicitly convert type 'System.Collections.Generic.KeyValuePair<double,decimal>' to 'decimal'
我尝试了不同的方法,但它不起作用。可能是什么问题?
最佳答案
其他人已经给出了使用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;
}
综上所述,我强烈建议您不要对
double
值执行相等操作。在您给出的情况下,它可以正常工作,但是一旦您开始使用任何一种算术,您就很可能最终导致问题。关于c# - 从字典中获取键和值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9895585/