从字典中获取键和值对

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)

我尝试了不同的方法,但它不想工作.可能是什么问题?

Jon*_*eet 5

其他人已经开始使用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值执行相等操作.在你给出的情况下它会工作正常,但是一旦你开始使用任何类型的算术,你最终可能会导致问题.