Главная » C# » Культурная среда в Visual C# (Sharp)

0

В .NET информация о культурной среде указывается с помощью двух идентификоров: языка и региональных стандартов. Как было упомянуто ранее, в Швейцарии разговаривают на четырех языках. Это означает, что  дата,  время  и  денежная  едица выражаются в четырех разных способах. Это не означает, что формат даты разный в немецком и французском языках. Но при одинаковом формате слова для обозначения марта — Maerz или Mars —  будут  разными.  С  другой  стороны,  слова для обозначения дат одинаковые в Австрии, Швейцарии  и  Германии,  но  формат даты разный. Это означает,  что для  стран  с  несколькими  языками,  например  Каны (французский и английский) или Люксембурга (французский и немецкий), нбходимо применение нескольких кодировок, отсюда и надобность в двух идентикаторах. Информацию  о  культурной  среде  можно  извлечь  с  помощью следующего   кода:

Culturelnfo info = Thread.CurrentThread.CurrentCulture(); Console.WriteLine("Culture (" + info.EnglishName + ")");

В данном примере информация о культурной среде, ассоциированной с текущим потоком, извлекается С помощью метода Thread.CurrentThread.CurrentCulture(). Как видно из этого примера, отдельные потоки можно ассоциировать с разными культурными средами. Свойство EngiishName генерирует английскую версию иормации  о  культурной  среде,  которая,  в   случае   установок,   приведенных   на рис.  3.11,  была бы  следующей:

Culture (English (Canada))

Теперь  рассмотрим  число  1,234.

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

Thread.CurrentThread.CurrentCulture = new Culturelnfo("en-CA");

В данном примере создается новый экземпляр класса Culturelnfo, содержащий региональный  стандарт  еп-СА.

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

public void TestGermanParseNumber() { Thread.CurrentThread.CurrentCulture = new Culturelnfo("de-DE"); double value = Double.Parse("1,234");

}

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

С  помощью  методов  Parse ()  и  TryParse ()  также  можно  преобразовывать  даты и время:

public void TestGermanParseDate() {

DateTime datetime = DateTime.Parse("May 10, 2005"); Assert.AreEqual(5, datetime.Month); Thread.CurrentThread.CurrentCulture = new Culturelnfo("de-DE"); datetime = DateTime. Parse ("10 Mai, 2005"),-

Assert.AreEqual(5, datetime.Month),-

}

Обратите внимание на то, как в первом применении метод DateTime. Parse () обротал текст, отформатированный по англо-канадским правилам, и узнал, что идеификатор мау равняется пятому месяцу года. Для второго вызова  метода DateTime. Parse о культурная среда была изменена на немецкую, что позволило обработать строку ю Mai, 2005. В обоих случаях, при условии, что мы знали, что обрабатываемая строка представляет немецкую или англо-канадскую дату, ее оаботка не представляла особых проблем. Но обработка немецкой даты при устовленной английской культурной среде вызовет проблемы.

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

public void TestGenerateString() { String buffer = 123.ToString(); Assert.AreEqual ("123", buffer) ,-

}

Значение 123 неявно преобразуется в переменную, для которой вызывается метод ToStringO, переводящий значение в его строковое представление и сохраняющий его в строковой переменной buffer. С помощью метода ToStringO также можно преобразовать в строки действительные числа, как показано в следующем примере:

double number = 123.5678;

String buffer = number.ToString("0.00");

В этом примере метод ToStringO имеет параметр, указывающий формат строкого представления преобразованного действительного числа. В данном случае указывается, что строковое представление числа должно иметь самое большее два знака после десятичной точки. Так как третья цифра после десятичной точки — 7, то результат округляется с повышением до 123.57.

Теперь рассмотрим, каким образом аспект культурной среды применим к преоброванию  чисел  в  строки.  В  следующем  коде  приводится  пример  преобразования числа в его строковое представление в формате определенной культурной среды, public void TestGenerateGermanNumber() {

double number = 123.5678;

Thread.CurrentThread.CurrentCulture = new Culturelnfo("de-DE"); String buffer = number.ToString("0.00"); Assert.AreEqual("123,57", buffer);

}

Как и в предыдущих примерах, желаемая культура присваивается свойству CurrentCulture текущего потока. После этого вызывается метод ToStringO детвительного  типа,   который   выполняет  преобразование   и   сохраняет  результат в строковой переменной buffer.

Советы разработчику

В этой главе мы рассмотрели строки и некоторые их применения. Далее приводяя ключевые аспекты главы, которые следует запомнить.

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

•    Тип string — это специальный ссылочный тип, имеющий многочисленные моды и свойства. Рекомендуется изучить возможности типа string в документии MS DM.

•    Лучшими источниками информации о конкретных методах, свойствах или типах являются IntelliSense и документация MSDN. Хорошими ресурсами для изучения концепции являются книги и Web-страницы, такие как Code Project.

•    Все переменные и типы являются объектами.

П  При  разработке  кода  необходимо  определить  ответственности  и   контексты.

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

•    Все строки основаны на кодировке Unicode. Длина символов Unicode — 16 битов.

•    Преобразование числового представления чисел и дат в строковое и обратное преобразование являются распространенными операциями.

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

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии