Набор C# определенная культура для класса

У меня есть класс в C#, который имеет различные методы. Я хочу использовать en-US культура во всех методах в этом классе. Я могу установить культуру для определенного класса?

Фон: у Меня есть a List<object> и часть из objectчисла, и некоторые - строки. Я хотел бы все числа записанная использующая американская культура, но я не знаю, какие объекты являются числами. object класс ToString() кажется, не берет аргумент культуры.

5
задан Chau 23 February 2010 в 15:23
поделиться

2 ответа

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

Глобальная информация о культуре устанавливается для каждого потока (с использованием 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;
}
5
ответ дан 14 December 2019 в 19:11
поделиться

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

0
ответ дан 14 December 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: