Форматные строки

Вы должны знать, как выглядят форматные строки. Встроенные числовые объекты используют стандартные строки числовых форматов или пользовательские форматные строки, определенные .NET Framework, описание которых можно найти в документации MSDN, выполнив поиск “standard numeric format strings”.

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

Примерами спецификаторов формата для чисел могут служить: “С” — для валюты, “D” — для десятичных чисел, 11Е” — для научной нотации, “F” — для нотации с фиксированной точкой и “Xм — для шестнадцатеричной нотации.

Каждый тип поддерживает также спецификатор “G” для обозначения общего вида, которым является спецификатор формата по умолчанию и который применяется, когда производится вызов Object.ToString без указания форматной строки. Если эти форматные строки не отвечают существующим потребностям, можно даже применять одну из пользовательских форматных строк, позволяющих описать то, что нужно, в более или менее наглядном виде.

Суть всего этого механизма заключается в том, что каждый тип интерпретирует и определяет форматную строку специфично для контекста его собственных нужд. Другими словами, System.Double вполне может трактовать спецификатор формата 11G” иначе, чем тип System.Int32.

Более того, пользовательский тип, скажем, Employee, волен определять форматные строки по своему усмотрению. Например, форматная строка “SSN” может порождать выходную строку, содержащую номер карточки социального страхования сотрудника.

Что даже еще удобнее — пользовательским типам можно позволить обрабатывать форматную строку “DBG”, создавая детализированную строку, которая представляет внутреннее состояние, для отправки в выходной журнал отладки.

Рассмотрим небольшой пример кода, в котором используются описанные выше концепции:

using System;
using System.Globalization;
using System.Windows.Forms;
public class EntryPoint {
static void Main()  {
Culturelnfo current = Culturelnfo.CurrentCulture;
Culturelnfo germany = new Culturelnfo( "de-DE" );
Culturelnfo russian = new Culturelnfo( "ru-RU" );
double money = 123.45;
string localMoney = money.ToString( "C", current );
MessageBox.Show( localMoney, "Локальные деньги" );
localMoney = money.ToString( "C", germany );
MessageBox.Show ( localMoney, "Деньги Германии" );
localMoney = money.ToString ( "C", russian );
MessageBox.Show ( localMoney, "Деньги России" );
}

В этом примере отображается строка с использованием типа MessageBox, определенного в System.Window.Forms, поскольку консоль не особенно подходит для вьвзода символов Unicode. Выбранный спецификатор формата — “С” — служит для отображения числа в формате валюты.

Для первого отображения используется экземпляр Culturelnfo, присоединенный к текущему потоку, а для второго создается Culturelnfo для Германии и России.

Обратите внимание, что при формировании строки тип System. Double использует свойства CurrencyDecimalSeparator, CurrencyDecimalDigits и CurrencySymbol экземпляра NumberFormatlnfо, возвращенного методом Culturelnfo.Get Format.

Если бы отображался экземпляр DateTime, то аналогичным образом реализация DateTime метода IFormattable.ToString использовала бы экземпляр DateTimeFormatlnfo, возвращенного методом Culturelnfo. Get Format.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100