Использование файлов * .resx для хранения пар строк-значений - PullRequest
1 голос
/ 14 октября 2010

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

Однако я хотел бы знать, есть ли какие-то важные недостатки использования файла * .resx для хранения простых пар ключ-значение вместо использования более традиционного программного типа.

1 Ответ

0 голосов
/ 14 октября 2010

Есть два минуса, которые я могу придумать совершенно неожиданно:

  • для чтения пары ключ / значение требуется операция ввода-вывода, что может привести к значительному снижению производительности,
  • если вы позволите стандартной логике .Net разрешать загрузочные ресурсы, она всегда будет пытаться найти файл, соответствующий свойству CultureInfo.CurrentUICulture;это может быть проблематично, если вы решите, что на самом деле хотите иметь несколько resx-ов (т.е. по одному на язык);это может привести к еще большему снижению производительности.

Кстати.Не могли бы вы просто создать вспомогательный класс или структуру, содержащую свойства, например:

public static class GlobalConstants
{
    private const int _SomeInt = 42;
    private const string _SomeString = "Ultimate answer";

    public static int SomeInt
    {
        get
        {
            return _SomeInt;
        }
    }

    public static string SomeString
    {
        get
        {
            return _SomeString;
        }
    }
}

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

textBox1.Text = GlobalConstants.SomeString;
textBox1.Top = GlobalConstants.SomeInt;

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

...