我想将欧洲硬币的直径存储在一个类中,并使用该类中的一种方法通过其直径来获取硬币的价值(价值)。

首先,我不确定使用类并在初始化时构建其字典是否是一个好主意,所以如果您知道更好的方法,请现在让我来。

其次,我为此类编写了如下代码:

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/

10-13 07:46
查看更多