c# - 从字典中获取键值对

标签 c# dictionary ienumerable

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

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

其次,我是这样写这个类的代码的:

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/

相关文章:

c# - WPF 自定义文字环绕

c# - .NET MSBuild 目标 AfterTargets=Pack using dotnet build

c# - 如何在不创建新列表的情况下检索 IEnumerable 的基础列表?

c# - Linq OrderBy() 与 List.Sort() 的速度

c# - 如何通知可观察集合中某项的属性已更改?

c# - Global.asax 找不到代码隐藏类

python - 如何从 Python 列表字典中的值生成所有组合

java - 如何在map.putAll()中获取对象的旧值?

java - 具有多个类的上限 - Java 泛型

c# - 根据 ID 将一个列表中的值分配给另一个列表