Поиск…


Вступление

Методы Format - это набор перегрузок в классе System.String используется для создания строк, которые объединяют объекты в конкретные представления строк. Эта информация может быть применена к String.Format , различным методам WriteLine а также другим методам в .NET framework.

Синтаксис

  • string.Format (строковый формат, params object [] args)
  • string.Format (поставщик IFormatProvider, строковый формат, params object [] args)
  • $ "string {text} blablabla" // Поскольку C # 6

параметры

параметр подробности
формат Строка составного формата , определяющая способ объединения аргументов в строку.
арг Последовательность объектов, которые должны быть объединены в строку. Поскольку это использует аргумент params , вы можете использовать список аргументов, разделенных запятыми, или фактический массив объектов.
поставщик Набор способов форматирования объектов для строк. Типичные значения включают CultureInfo.InvariantCulture и CultureInfo.CurrentCulture .

замечания

Заметки:

  • String.Format() обрабатывает null аргументы, не String.Format() исключения.
  • Существуют перегрузки, которые заменяют параметр args одним, двумя или тремя параметрами объекта.

Места, где String.Format «встроен» в структуру

Есть несколько мест, где вы можете использовать String.Format косвенно : секрет заключается в String.Format перегрузки с string format, params object[] args подписи string format, params object[] args , например:

Console.WriteLine(String.Format("{0} - {1}", name, value));

Может быть заменен более короткой версией:

Console.WriteLine("{0} - {1}", name, value);

Существуют и другие методы, которые также используют String.Format например:

Debug.WriteLine(); // and Print()
StringBuilder.AppendFormat();

Использование формата пользовательского номера

NumberFormatInfo может использоваться для форматирования чисел integer и float.

// invariantResult is "1,234,567.89"
var invarianResult = string.Format(CultureInfo.InvariantCulture, "{0:#,###,##}", 1234567.89);

// NumberFormatInfo is one of classes that implement IFormatProvider
var customProvider = new NumberFormatInfo
{
    NumberDecimalSeparator = "_NS_", // will be used instead of ','
    NumberGroupSeparator = "_GS_", // will be used instead of '.'
};

// customResult is "1_GS_234_GS_567_NS_89"
var customResult = string.Format(customProvider, "{0:#,###.##}", 1234567.89);

Создание поставщика настраиваемого формата

public class CustomFormat : IFormatProvider, ICustomFormatter
{
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (!this.Equals(formatProvider))
        {
            return null;
        }

        if (format == "Reverse")
        {
            return String.Join("", arg.ToString().Reverse());
        }

        return arg.ToString();
    }

    public object GetFormat(Type formatType)
    {
        return formatType==typeof(ICustomFormatter) ? this:null;
    }
}

Использование:

String.Format(new CustomFormat(), "-> {0:Reverse} <-", "Hello World");

Выход:

-> dlroW olleH <-

Выровнять влево / вправо, прокладка с пробелами

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

string.Format("LEFT:  string: ->{0,-5}<- int: ->{1,-5}<-", "abc", 123);
string.Format("RIGHT: string: ->{0,5}<- int: ->{1,5}<-", "abc", 123);

Выход:

LEFT:  string: ->abc  <- int: ->123  <-
RIGHT: string: ->  abc<- int: ->  123<-

Числовые форматы

// Integral types as hex
string.Format("Hexadecimal: byte2: {0:x2}; byte4: {0:X4}; char: {1:x2}", 123, (int)'A');

// Integers with thousand separators
string.Format("Integer, thousand sep.: {0:#,#}; fixed length: >{0,10:#,#}<", 1234567);

// Integer with leading zeroes
string.Format("Integer, leading zeroes: {0:00}; ", 1);

// Decimals
string.Format("Decimal, fixed precision: {0:0.000}; as percents: {0:0.00%}", 0.12);

Выход:

Hexadecimal: byte2: 7b; byte4: 007B; char: 41
Integer, thousand sep.: 1,234,567; fixed length: > 1,234,567<
Integer, leading zeroes: 01; 
Decimal, fixed precision: 0.120; as percents: 12.00%

Форматирование валюты

Спецификатор формата «c» (или валюты) преобразует число в строку, представляющую сумму валюты.

string.Format("{0:c}", 112.236677) // $112.23 - defaults to system

точность

Значение по умолчанию - 2. Используйте c1, c2, c3 и т. Д. Для контроля точности.

string.Format("{0:C1}", 112.236677) //$112.2
string.Format("{0:C3}", 112.236677) //$112.237
string.Format("{0:C4}", 112.236677) //$112.2367
string.Format("{0:C9}", 112.236677) //$112.236677000

Символ валюты

  1. CultureInfo экземпляр CultureInfo для использования символа пользовательской культуры.
string.Format(new CultureInfo("en-US"), "{0:c}", 112.236677); //$112.24
string.Format(new CultureInfo("de-DE"), "{0:c}", 112.236677); //112,24 €
string.Format(new CultureInfo("hi-IN"), "{0:c}", 112.236677); //₹ 112.24
  1. Используйте любую строку в качестве символа валюты. Используйте NumberFormatInfo для настройки символа валюты.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
nfi.CurrencySymbol = "?";
string.Format(nfi, "{0:C}", 112.236677); //?112.24
nfi.CurrencySymbol = "?%^&";
string.Format(nfi, "{0:C}", 112.236677); //?%^&112.24

Позиция валютного символа

Используйте CurrencyPositivePattern для положительных значений и CurrencyNegativePattern для отрицательных значений.

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
string.Format(nfi, "{0:C}", 112.236677); //$112.24 - default
nfi.CurrencyPositivePattern = 1;
string.Format(nfi, "{0:C}", 112.236677); //112.24$
nfi.CurrencyPositivePattern = 2;
string.Format(nfi, "{0:C}", 112.236677); //$ 112.24
nfi.CurrencyPositivePattern = 3; 
string.Format(nfi, "{0:C}", 112.236677); //112.24 $

Отрицательное использование шаблона совпадает с положительным. Гораздо больше случаев использования см. В исходной ссылке.

Пользовательский десятичный разделитель

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
nfi.CurrencyDecimalSeparator = "..";
string.Format(nfi, "{0:C}", 112.236677); //$112..24

Поскольку C # 6.0

6,0

Начиная с C # 6.0, вместо String.Format можно использовать интерполяцию String.Format .

string name = "John";
string lastname = "Doe";
Console.WriteLine($"Hello {name} {lastname}!");

Привет, Джон Доу!

Дополнительные примеры для этого в разделе C # 6.0: String-интерполяция .

Выделение фигурных скобок внутри выражения String.Format ()

string outsidetext = "I am outside of bracket";
string.Format("{{I am in brackets!}} {0}", outsidetext);

//Outputs "{I am in brackets!} I am outside of bracket"

Форматирование даты

DateTime date = new DateTime(2016, 07, 06, 18, 30, 14);
// Format: year, month, day hours, minutes, seconds

Console.Write(String.Format("{0:dd}",date)); 

//Format by Culture info
String.Format(new System.Globalization.CultureInfo("mn-MN"),"{0:dddd}",date);
6,0
Console.Write($"{date:ddd}");

выход :

06
Лхагва
06
Тендерный Имея в виду Образец Результат
d Дата {0:d} 7/6/2016
дд День, с нулевой {0:dd} 06
ддд Короткое название дня {0:ddd} Мы бы
дддд Полное имя дня {0:dddd} среда
D Долгосрочная дата {0:D} Среда, 6 июля 2016 г.
е Полная дата и время, короткие {0:f} Среда, 6 июля 2016 года 18:30
Ф.Ф. Вторая фракция, 2 цифры {0:ff} 20
FFF Вторая фракция, 3 цифры {0:fff} 201
FFFF Вторая фракция, 4 цифры {0:ffff} 2016
F Полная дата и время, длинные {0:F} Среда, 6 июля 2016 года 6:30:14
г Дата и время по умолчанию {0:g} 6/6/2016 18:30
гг эпоха {0:gg} ОБЪЯВЛЕНИЕ
чч Час (2 цифры, 12H) {0:hh} 06
HH Час (2 цифры, 24 часа) {0:HH} 18
M Месяц и день {0:M} 6 июля
мм Минуты с нулевым запасом {0:mm} 30
М.М. Месяц, с нулевым запасом {0:MM} 07
MMM 3-месячное название месяца {0:MMM} июль
MMMM Полное название месяца {0:MMMM} июль
сс секунд {0:ss} 14
р Дата RFC1123 {0:r} Ср, 06 июл 2016 18:30:14 GMT
s Строка сортируемой даты {0:s} 2016-07-06T18: 30: 14
T Короткое время {0:t} 6:30 ВЕЧЕРА
T Много времени {0:T} 6:30:14 PM
тт ДО ПОЛУДНЯ ПОСЛЕ ПОЛУДНЯ {0:tt} ВЕЧЕРА
U Универсальное сортируемое местное время {0:u} 2016-07-06 18: 30: 14Z
U Универсальный GMT {0:U} Среда, 6 июля 2016 года 9:30:14
Y Месяц и год {0:Y} Июль 2016 г.
уу 2-значный год {0:yy} 16
гггг 4-значный год {0:yyyy} 2016
ZZ Двузначное смещение часового пояса {0:zz} +09
ZZZ полное смещение часового пояса {0:zzz} +09: 00

Нанизывать()

Метод ToString () присутствует во всех типах ссылочных объектов. Это происходит из-за того, что все ссылочные типы выводятся из Object, на котором есть метод ToString (). Метод ToString () в базовом классе объекта возвращает имя типа. Оставшийся фрагмент выведет «Пользователь» на консоль.

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

Тем не менее, пользователь класса может также переопределить ToString (), чтобы изменить возвращаемую строку. Ниже фрагмент кода выводит на консоль «Id: 5, Name: User1».

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
    public override ToString()
    {
        return string.Format("Id: {0}, Name: {1}", Id, Name);
    }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

Связь с ToString ()

Хотя метод String.Format() безусловно, полезен при форматировании данных в виде строк, он часто может быть немного перегружен, особенно при работе с одним объектом, как показано ниже:

String.Format("{0:C}", money);  // yields "$42.00"

Более простым подходом может быть просто использование метода ToString() доступного для всех объектов в C #. Он поддерживает все одинаковые стандартные и настраиваемые строки форматирования , но не требует необходимого сопоставления параметров, поскольку будет только один аргумент:

money.ToString("C");  // yields "$42.00"

Ограничения и форматирование ограничений

Хотя в некоторых сценариях этот подход может быть проще, подход ToString() ограничен в отношении добавления левого или правого заполнения, как вы могли бы сделать в String.Format() :

String.Format("{0,10:C}", money);  // yields "    $42.00"

Чтобы достичь такого же поведения с помощью метода ToString() , вам нужно будет использовать другой метод, например PadLeft() или PadRight() :

money.ToString("C").PadLeft(10);  // yields "    $42.00"


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow