rusqhyazeubebgcahrcsdanlenetfifrglkadeelhuisgaitkkkylvltmknoplptrosrskslessvtrukuz

String.Format - как это работает?

Больше
7 мес. 1 день назад #287 от О.Коровяков
О.Коровяков создал тему: String.Format - как это работает?
String.Format - как это работает и как реализовать пользовательские строки формата

С String.Format() можно форматировать, например, DateTime объекты разными способами. Каждый раз, когда я ищу желаемый формат, мне нужно искать в Интернете. Почти всегда я нахожу пример, который я могу использовать. Например:
String.Format("{0:MM/dd/yyyy}", DateTime.Now);          // "09/05/2012"
Но я не знаю, как это работает и какие классы поддерживают эти "магические" дополнительные строки.

Итак, мои вопросы:

--- Как String.Format сопоставить дополнительную информацию MM/dd/yyyy с результатом строки?
--- Поддерживают ли все объекты Microsoft эту функцию?
--- Это где-то зарегистрировано?
--- Можно ли сделать что-то вроде этого:
String.Format("{0:MyCustomFormat}", new MyOwnClass())

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #288 от О.Коровяков
О.Коровяков ответил в теме String.Format - как это работает?
String.Format соответствует каждому из токенов внутри строки ({0} и т.д.) для соответствующего объекта: msdn.microsoft.com/en-us/library/system.string.format.aspx

Дополнительно предоставляется строка формата:
{ index[,alignment][ : formatString] }

Если предоставлен formatString, соответствующий объект должен реализовать IFormattable и, в частности, метод ToString, который принимает formatString и возвращает соответствующую форматированную строку: msdn.microsoft.com/en-us/library/system....ttable.tostring.aspx

Может использоваться также IFormatProvider, который может использоваться для захвата основных стандартов форматирования/значений по умолчанию и т.д. Примеры здесь и здесь .

Итак, ответы на ваши вопросы в порядке:

--- Он использует метод IFormattable interface ToString() для объекта DateTime и передает строку формата MM/dd/yyyy. Это реализация, которая возвращает правильную строку.
--- Любой объект, реализующий IFormattable, поддерживает эту функцию. Вы даже можете написать свой собственный!
--- Да, см. выше.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #289 от О.Коровяков
О.Коровяков ответил в теме String.Format - как это работает?
С моей точки зрения, вам нужно будет реализовать IFormattable в своем классе для поддержки этого. Тогда есть метод ToString, который принимает параметры, которые вы передаете в String.Format.

Вот пример.
// Define other methods and classes here
public class Sample : IFormattable
{
     public string ToString(string format, IFormatProvider provider)
     {
         return String.Concat("Your custom format was ", format);
     }
}
 
String.Format("{0:MyCustomFormat}", new Sample())

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #290 от О.Коровяков
О.Коровяков ответил в теме String.Format - как это работает?
Проверьте официальные документы MSDN, здесь есть полный список строк формата DateTime: msdn.microsoft.com/en-us/library/az4se3k1.aspx . На самом деле существует немало "магических" строк.

Насколько я знаю, не все типы имеют "интересное" форматирование, но все типы поддерживают ToString(). Если вам нужно отформатировать встроенный объект, вы можете добавить метод расширения для этого, но обычно форматирование предоставляется в любом месте, где это необходимо (или, говоря другим способом, у меня есть только собственные пользовательские форматирования для моих собственных типов).

Да, вы можете написать свой собственный, и если у вас есть данные, которые могут быть отформатированы по-разному, вы, вероятно, должны написать собственный форматировщик, выполнив IFormattable, снова просмотрите документы здесь: msdn.microsoft.com/en-us/library/system.iformattable.aspx . Это довольно просто, вы просто проверяете предоставленные строки и записываете свои данные на их основе, там нет волшебства за кулисами: -)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #291 от О.Коровяков
О.Коровяков ответил в теме String.Format - как это работает?
Под обложками String.Format делает что-то следующее,
IFormattable formattable = objectToFormat as IFormattable;
if (formattable != null)
{
    formattable.ToString(objectToFormat);
}
else
{
    objectToFormat.ToString();
}

По всем вопросам,

Как String.Format сопоставляет дополнительную информацию MM/dd/yyyy с результатом строки?
Как указано выше, он просто вызывает IFormattable.ToString(строковый формат, поставщик IFormatProvider). Поставщик часто является тем, что говорит вам, что такое культура вашей системы. Часто null, потому что люди не передают его String.Format(), как это было в вашем случае.

Поддерживает ли все объекты Microsoft эту функцию? Является ли это документированным где-нибудь?
Все, что реализует IFormattable, делает.

Можно ли сделать что-то вроде этого: String.Format("{0:MyCustomFormat}, new MyOwnClass())
По существу, если вы хотите, чтобы ваш собственный объект что-то делал с форматом при условии, что вы реализуете IFormattable.

Существует огромное количество поддерживающих классов и счетчиков, чтобы гарантировать, что строки формата во многом схожи. Подробнее здесь .

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #292 от О.Коровяков
О.Коровяков ответил в теме String.Format - как это работает?
Да, это возможно - он может быть полностью настроен. Посмотрите эту ссылку на документацию о форматировании даты и времени .

Если у вас есть свой собственный объект, вам стоит переопределить метод ToString() и вывести все, что, по вашему мнению, соответствующее представление. После этого вы можете использовать String.Format("{0:MyCustomFormat}", new MyOwnClass()), потому что это неявно вызывает MyOwnClass.ToString()

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подпишитесь на наши новости...

Если вам интересны материалы опубликованных на Нашем сайте, Вы можете подписаться на рассылку информационных бюллетеней о новых публикациях ... Просто введите адрес электронной почты на какую Вы хотите получать Новости и нажмите кнопку "Подписаться"

Контакт Инфо

Ok-Wood.
08304 ул.Салютная,c.Гнедын,
Киевская обл, Украина
  • Тел: +39 067 492 41 24
    Tel: +38 095 095 88 60
  • Email: info@ok-wood.com.ua
  • Web: ok-wood.com.ua

Весь процесс строительства описан на страницах сайта, но более подробно о технологии, методах строительства, и всех деталях - Вы можете узнать в книге.