Где загрузить предустановленный словарь? - PullRequest
2 голосов
/ 01 апреля 2010

Каждый раз, когда программа загружается, мне нужен словарь, чтобы иметь около 15 значений. Прямо сейчас я использую функцию под названием «Load_Dictionary», которая просто добавляет каждое значение. Как вы предлагаете загружать словарь, как это? Через функцию? Использование файла XML?

Ответы [ 4 ]

4 голосов
/ 01 апреля 2010

Создайте статическое свойство / поле только для чтения и установите его в статическом конструкторе класса.

public static readonly Dictionary<string, string> Field;

static Foo()
{
    Field = new Dictionary<string, string>
        {
            {"key", "value"},
        };
}

Или сделать уступку прямо в декларации:

public static readonly Dictionary<string, string> Field = new Dictionary<string, string>
    {
        {"key", "value"},
    };
3 голосов
/ 01 апреля 2010

Обратите внимание, что в C # 3.0 вы можете использовать инициализатор коллекции для инициализации статического поля, тогда вам не нужен ваш собственный конструктор. Сохраняйте конфиденциальность данных и предоставьте механизм доступа, чтобы избежать необходимости синхронизировать данные (поскольку они только когда-либо читаются):

private static readonly Dictionary<string, string> myData
    = new Dictionary<string, string> {
        {"abc","def"},
        {"ghi","jkl"},
        {"mno","pqr"},
    };
public static string GetValue(string key) { return myData[key]; }

Если у вас есть лоты данных для загрузки, рассмотрите какую-то сериализованную форму. XML, двоичный файл, база данных - что угодно.

2 голосов
/ 01 апреля 2010

Создайте статическое свойство класса и в методе доступа get проверьте, является ли закрытый статический аналог нулевым, и если это так, создайте его, иначе верните его

[ThreadStatic]
private static Dictionary<string, string> _MyProperty;
public static Dictionary<string, string> MyProperty 
{
    get
    {
        return _MyProperty = _MyProperty ?? StaticFunctionToLoadValues();
    }
}
0 голосов
/ 01 апреля 2010

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

class Foo 
{
  static Dictionary<string, string> makeDictionary() 
  {
    return new Dictionary<string, string>
      {
        {"hello", "mum"},
      };
  }
  static Dictionary<string, string> theDictionary = makeDictionary();
}

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

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