在C#中以枚举为键创建静态只读字典

时间:2018-08-28 16:51:53

标签: c# dictionary enums

我正在尝试创建一个静态类,其中包含一些程序的硬编码参考信息。该静态类包含一个枚举和一个参考字典,该字典使用该枚举选择一组预定义的数值。这是我在下面做的事的一个例子:

enum CellChemistry
{
    PbAc,
    NiZn,
    NiMH
}

public static class ChemistryInfo
{
    public static readonly Dictionary<CellChemistry, decimal> NominalVoltage = new Dictionary<CellChemistry, decimal>
    {
        { CellChemistry.PbAc, 2 },
        { CellChemistry.NiZn, 1.7 },
        { CellChemistry.NiMH, 1.2 }
    };
}

但是我在行上不断收到语法错误,提示{ CellChemistry.PbAc, 2 },初始化字典,

The Best overloaded Add method 'Dictionary<CellChemistry, decimal>.Add(CellChemistry, decimal)' for the collection initializer has some invalid arguments.

这是什么意思,我该如何解决?

1 个答案:

答案 0 :(得分:3)

问题是从doubledecimal没有隐式转换。如果您尝试仅将值分配给变量,则可以看到以下内容:

decimal x1 = 2; // Fine, implicit conversion from int to decimal
decimal x2 = 1.7; // Compile-time error, no implicit conversion from double to decimal
decimal x3 = 1.2; // Compile-time error, no implicit conversion from double to decimal

您想改用十进制文字-使用后缀m

public static readonly Dictionary<CellChemistry, decimal> NominalVoltage = new Dictionary<CellChemistry, decimal>
{
    { CellChemistry.PbAc, 2 },
    { CellChemistry.NiZn, 1.7m },
    { CellChemistry.NiMH, 1.2m }
};

为了保持一致,我建议使用2m而不是2m来建议,但是您不需要

(您确实需要公开CellChemistry或使ChemistryInfo中的字段不公开。或者使ChemistryInfo不公开。但这是可访问性一致性的问题。)