Объявите Словарь в статическом классе

87
задан MAXE 11 February 2016 в 10:23
поделиться

7 ответов

Если Вы хотите объявить словарь, как только и никогда не изменять его тогда объявляют его как только для чтения:

private static readonly Dictionary<string, string> ErrorCodes
    = new Dictionary<string, string>
{
    { "1", "Error One" },
    { "2", "Error Two" }
};

, Если Вы хотите к объектам словаря быть только для чтения (не только ссылка, но также и объекты в наборе) тогда, необходимо будет создать класс словаря только для чтения, который реализует IDictionary.

Выезд ReadOnlyCollection для ссылки.

константа BTW может только использоваться при объявлении встроенных скалярных величин.

207
ответ дан Yona 24 November 2019 в 07:43
поделиться

Правильный синтаксис (как протестировано в VS 2008 SP1), это:

public static class ErrorCode
{
    public static IDictionary<string, string> ErrorCodeDic;
     static ErrorCode()
    {
        ErrorCodeDic = new Dictionary<string, string>()
            { {"1", "User name or password problem"} };
    }
}
8
ответ дан Graviton 24 November 2019 в 07:43
поделиться

Проблема с Вашим начальным примером происходила, прежде всего, из-за использования const, а не static; Вы не можете создать непустую ссылку константы в C#.

я полагаю, что это также работало бы:

public static class ErrorCode
{
    public static IDictionary<string, string> ErrorCodeDic
        = new Dictionary<string, string>()
            { {"1", "User name or password problem"} };
}

кроме того, как Y Нижние точки, добавляя readonly хорошая идея также, и ни один из модификаторов, обсужденных здесь, не предотвратит сам словарь от того, чтобы быть измененным.

1
ответ дан Charlie 24 November 2019 в 07:43
поделиться

Сделайте Словарь помехами, и никогда не добавляйте к нему за пределами ctor своего статического объекта. Это, кажется, простое решение, чем игра со статическими правилами / правилами константы в C#.

0
ответ дан Jeff Hubbard 24 November 2019 в 07:43
поделиться

Можно использовать статическое / конструктора класса для инициализации словаря:

public static class ErrorCode
{
    public const IDictionary<string, string> ErrorCodeDic;
    public static ErrorCode()
    {
        ErrorCodeDic = new Dictionary<string, string>()
            { {"1", "User name or password problem"} };
    }
}
-1
ответ дан Andy 24 November 2019 в 07:43
поделиться
public static class ErrorCode
{
    public const IDictionary<string , string > m_ErrorCodeDic;

    public static ErrorCode()
    {
      m_ErrorCodeDic = new Dictionary<string, string>()
             { {"1","User name or password problem"} };             
    }
}

, Вероятно, инициализируют в конструкторе.

-2
ответ дан Craig 24 November 2019 в 07:43
поделиться

ОК - так что я работаю в ASP 2.x (не мой выбор ... но эй, кто скулит?).

Ни один из примеров инициализации словаря не работает. Потом я наткнулся на это: http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing- dictionaries-and-collections.aspx

... что подтолкнуло меня к тому факту, что можно ' t использовать инициализацию коллекций в ASP 2.x.

0
ответ дан 24 November 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: