我正在尝试创建一个静态类,其中包含一些程序的硬编码参考信息。该静态类包含一个枚举和一个参考字典,该字典使用该枚举选择一组预定义的数值。这是我在下面做的事的一个例子:
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.
这是什么意思,我该如何解决?
答案 0 :(得分:3)
问题是从double
到decimal
没有隐式转换。如果您尝试仅将值分配给变量,则可以看到以下内容:
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
不公开。但这是可访问性一致性的问题。)