У меня есть класс в C#, который имеет различные методы. Я хочу использовать en-US
культура во всех методах в этом классе. Я могу установить культуру для определенного класса?
Фон: у Меня есть a List<object>
и часть из object
числа, и некоторые - строки. Я хотел бы все числа записанная использующая американская культура, но я не знаю, какие объекты являются числами. object
класс ToString()
кажется, не берет аргумент культуры.
Класс - это структура данных, а локализованное форматирование строки - это поведение. С точки зрения кода / компилятора, эти две вещи не имеют ничего общего друг с другом, и нет смысла устанавливать его для каждого класса. Эта проблема относится к области кода, который использует класс, или к коду внутри самого класса.
Глобальная информация о культуре устанавливается для каждого потока (с использованием Thread.CurrentThread.CurrentCulture
или CultureInfo.CurrentCulture
). Одна вещь, которую вы можете сделать, - это обернуть каждый метод класса в набор / восстановление культуры. Поскольку культура потока для всех целей является глобальной переменной, это может стать проблемой, если ваш класс когда-либо вызовет где-то еще.
Наилучший подход, если вы хотите указать культуру для своего класса, - это просто иметь экземпляр культуры для использования в качестве свойства класса, а затем использовать зависящие от культуры перегрузки большинства форматов строк / чисел. функции.
class MyClass {
public CultureInfo Culture { get; set; }
public void GetSomeString() {
return new Int32().ToString(Culture);
}
}
Edit: При внимательном рассмотрении вашего вопроса, я думаю, что вы хотите сделать что-то в этом роде:
var lastCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
try {
// loop over list here
}
finally {
Thread.CurrentThread.CurrentCulture = lastCulture;
}
Вы можете попробовать приводить элементы и вызывать ToString на полученном элементе, указывая локализацию (отлавливая InvalidCastException, когда он возникает, и обрабатывая его соответствующим образом), как это разрешено в строке или числе. Решение в лучшем случае вонючее, но работоспособное.