Есть ли способ установить DLL, чтобы всегда следовать CultureInfo.Инвариантная культура по умолчанию, если не указано?
У меня есть много кода в библиотеке классов, который не указывает CultureInfo.InvariantCulture. Например, в операциях toString, toBool, toInt и т. д.
Есть ли способ, которым я могу задать свойство для библиотеки классов, чтобы она всегда выполнялась с использованием CultureInfo.InvariantCulture, даже если оно не указано явно везде в коде?
Что-то вроде глобального переключателя?
Это не только грязно, чтобы явно вводить его каждый раз, это делает мой код менее читаемым, и это королевская боль, например:
if (Convert.ToInt16(task.RetryCount, CultureInfo.InvariantCulture) <
Convert.ToInt16(ConfigurationManager.AppSettings["TasksMaxRetry"], CultureInfo.InvariantCulture))
2 ответов:
Вы, скорее всего, захотите, чтобы многие из ваших операций синтаксического анализа были сгруппированы в одном классе; возможно, тот, который имеет дело с конфигурацией чтения. В этом классе можно определить поле, содержащее язык и региональные параметры, которые вы хотите использовать для синтаксического анализа:
private static readonly IFormatProvider parseFormat = CultureInfo.InvariantCulture;Затем используйте это поле в любых вызовах для преобразования методов или аналогичных. Объявление поля в качестве IFormatProvider, вместе с хорошо выбранным именем, сообщает читателю код очень явно, что это поле используется для определения формата синтаксического анализа. ИМХО, это делает намерение кода более ясным.
Другой способ сделать это-создать свой собственный класс Parse / Convert, который обертывает Convert.ToXxx методы и вызывает их с форматом, который вы собираетесь использовать. Тогда у вас будет желаемое преимущество-не нужно будет явно указывать формат в каждом вызове.
Я так не думаю, но можно установить CultureInfo на основе каждого потока:
Console.WriteLine(double.Parse("1.000")); Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Console.WriteLine(double.Parse("1.000"));Вывод на моей машине (ваш вывод может варьироваться в зависимости от вашей текущей культуры):
1000 1Это то, что вы хотите?
Comments