Строковые ссылки в C # - PullRequest
       16

Строковые ссылки в C #

0 голосов
/ 02 декабря 2009

это мой первый пост.

Я выбираю некоторые поля из базы данных, которые представляют собой числовые значения идентификатора, например, 10,20,100,110 и т. Д. Эти цифры на самом деле означают нечто значимое, например, площадь. В идеале должна быть таблица поиска в базе данных с соответствующими полями идентификатора и имени, но ее нет, и теперь ее стало трудно реализовать в разумные сроки (политика).

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

private string GetUnitName(string areaid)
{
    string areaName = string.Empty;
    switch (areaid.Trim())
    {
        case "10":
            areaName = "area 1";
            break;
        case "20":
            areaName = "area 2";
            break;
        case "30":
            areaName = "area 3";
            break;
    }
    return areaName ;
}

Я не могу получить их в виде даты, так как лучше всего хранить эти строки области?
Могу ли я сгруппировать их в файле настроек или что-то?

Спасибо за прослушивание

Ответы [ 6 ]

4 голосов
/ 02 декабря 2009

Вы можете хранить их как перечисление:

public enum Areas
{
    [Description("Area 1")]
    Area1 = 10,
    [Description("Area 2")]
    Area2 = 20,
    [Description("Area 3")]
    Area3 = 30
}

Areas x = Areas.Area1;
string xName = x.ToString();
3 голосов
/ 02 декабря 2009

Как Enum вам придется перекомпилировать, если вам когда-нибудь понадобится их изменить (зависит от того, как часто они меняются)?

В качестве альтернативы вы могли бы просто иметь XML-документ, который вы могли бы спрятать в Cache и XPath, чтобы найти текст для идентификатора?

<Areas>
  <Area id="10">Area 1</Area>
  <Area id="20">Area 2</Area>
  <Area id="30">Area 3</Area>
</Areas>

XPath: /Areas/Area[@id='<your id here>']

Установите срок действия кэша, если срок действия файла изменился, и тогда, когда вы обновите его, вам не нужно будет ничего перезапускать. Для скорости вы можете записать это в память как хеш, так что вам не нужно постоянно хранить XPathing в документе.

1 голос
/ 02 декабря 2009

Можете ли вы затем хранить их в XML-файле и динамически загружать их при запуске / обновлении данных. Таким образом, вы можете создать структуру для последующего изменения таблицы базы данных.

0 голосов
/ 02 декабря 2009

С точки зрения хранения кода я бы рассмотрел Dictionary и KeyValuePair, что делает поиск простым и быстрым. Предположим, вы говорите о количестве данных, которое может быть обработано в памяти.

См. Лучшая реализация для структуры данных пары значений ключа?

Тогда вы можете загрузить хранилище из файла. XML был бы хорошим способом, хотя если бы это были просто простой идентификатор и строковое значение, то достаточно простого текстового файла CSV.

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

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

0 голосов
/ 02 декабря 2009

Возможно, вы захотите рассмотреть Классы перечисления , чтобы предоставить вам большинство преимуществ перечислений, но все же позволить вам расширить реализацию по своему усмотрению (например, добавив свой собственный метод сохранения и кэширование как предлагается в некоторых других ответах на этот вопрос).

В вопросе , который я задавал о перечислениях, есть еще немного информации .

0 голосов
/ 02 декабря 2009

Вы можете создать объект, содержащий идентификатор и текст, и вы можете найти более эффективные способы рефакторинга оттуда.

Редактировать: и хранить их где-нибудь в Списке, конечно:)

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