Создание статического словаря только для чтения с enum в качестве ключа в C # - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать статический класс с некоторой жестко запрограммированной справочной информацией для программы. Этот статический класс содержит перечисление и справочный словарь, который использует перечисление для выбора набора предварительно определенных числовых значений. Вот пример того, что я делаю ниже:

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 голосов
/ 28 августа 2018

Проблема в том, что не существует неявного преобразования из 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 }
};

Для согласованности я бы предложил , используя 2 м вместо 2, но вам не нужно .

(Вам нужно либо сделать CellChemistry общедоступным, либо сделать поле непубличным в ChemistryInfo. Или сделать ChemistryInfo непубличным. Но это вопрос согласованности доступности.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...