String.Format String.Format String.Format String.Format Method

Определение

Преобразует значения объектов в строки на основе указанных форматов и вставляет их в другую строку.Converts the value of objects to strings based on the formats specified and inserts them into another string.

Если вы не знакомы с методом String.Format, см. краткие сведения в разделе Начало работы с методом String.Format.If you are new to the String.Format method, see the Get started with the String.Format method section for a quick overview.

В разделе Примечания приводится общая документация для метода String.Format.See the Remarks section for general documentation for the String.Format method.

Перегрузки

Format(String, Object) Format(String, Object) Format(String, Object) Format(String, Object)

Заменяет один или более элементов формата в строке строковым представлением указанного объекта.Replaces one or more format items in a string with the string representation of a specified object.

Format(String, Object[]) Format(String, Object[]) Format(String, Object[]) Format(String, Object[])

Заменяет элемент формата в указанной строке строковым представлением соответствующего объекта в указанном массиве.Replaces the format item in a specified string with the string representation of a corresponding object in a specified array.

Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object)

Заменяет элементы формата в указанной строке строковым представлением соответствующего объекта.Replaces the format item or items in a specified string with the string representation of the corresponding object. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[])

Заменяет элементы формата в строке строковым представлениями соответствующих объектов в указанном массиве.Replaces the format items in a string with the string representations of corresponding objects in a specified array. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects.

Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects.

Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.An parameter supplies culture-specific formatting information.

Примеры

Многочисленные примеры, которые вызывают Format метод смешиваются через "Примечания" этой статьи.Numerous examples that call the Format method are interspersed through the Remarks section of this article.

Примечание

Примеры C# в этой статье выполняются во встроенном средстве выполнения кода и на площадке Try.NET.The C# examples in this article run in the Try.NET inline code runner and playground. Нажмите на кнопку Выполнить, чтобы выполнить пример в интерактивном окне.Select the Run button to run an example in an interactive window. После выполнения кода вы можете изменить его и выполнить измененный код, снова нажав на кнопку Выполнить.Once you execute the code, you can modify it and run the modified code by selecting Run again. Либо в интерактивном окне выполняется измененный код, либо, если компиляция завершается с ошибкой, в интерактивном окне отображаются все сообщения об ошибках компилятора C#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

Вы также можете скачать полный набор String.Format примеры, которые входят в проект .NET Core 2.0 для C# и проект .NET Core 2.0 для Visual Basic, из dotnet / репозитории примеров GitHub.You can also download a complete set of String.Format examples, which are included a .NET Core 2.0 project for C# and a .NET Core 2.0 project for Visual Basic, from the dotnet/samples GitHub repository.

Ниже приведены некоторые примеры, включенные в статью.The following are some of the examples included in the article:

Создать строку форматаCreate a format string

Вставка строкиInserting a string
Элемент форматаThe format item
Формат элементы, имеющие тот же индексFormat items that have the same index

Элемент управления Форматированные выходные данныеControl formatted output

Управление форматированиемControlling formatting
Управление интервалControlling spacing
Управление выравниванияControlling alignment
Управление количеством цифр целой частиControlling the number of integral digits
Управление количеством цифр после десятичного разделителяControlling the number of digits after the decimal separator
Включая фигурные скобки литерала в результирующую строкуIncluding literal braces in a result string

Сделать строки формата языка и регионаMake format strings culture-sensitive

Форматирование с учетом языка и региональных параметровCulture-sensitive formatting

Настройка операции форматированияCustomize the formatting operation

Пользовательские операции форматированияA custom formatting operation
Поставщик отсекаемый отрезок и модуль форматирования римские цифрыAn intercept provider and Roman numeral formatter

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

СодержаниеIn this section:

Начало работы с методом String.Format Get started with the String.Format method
Какой метод следует вызывать? Which method do I call?
Метод Format краткое описание The Format method in brief
Элемент формата The Format item
Каким образом форматируются аргументов How arguments are formatted
Формат элементы, имеющие тот же индекс Format items that have the same index
Форматирование и языка и региональных параметров Formatting and culture
Настраиваемое форматирование операций Custom formatting operations
String.Format Q & AString.Format Q & A

Начало работы с методом String.FormatGet started with the String.Format method

Используйте String.Format Если вам нужно вставить значение из объекта, переменной или выражения в другой строке.Use String.Format if you need to insert the value of an object, variable, or expression into another string. Например, можно вставить значение Decimal значение в строку, чтобы отобразить ее пользователю как одну строку:For example, you can insert the value of a Decimal value into a string to display it to the user as a single string:

Decimal pricePerOunce = (Decimal)17.36;
String^ s = String::Format("The current price is {0} per ounce.",
                           pricePerOunce);
// Result: The current price is 17.36 per ounce.
Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0} per ounce.",
                         pricePerOunce);
Console.WriteLine(s);
// Result: The current price is 17.36 per ounce.
Dim pricePerOunce As Decimal = 17.36d
Dim s As String = String.Format("The current price is {0} per ounce.",
                                pricePerOunce)
' Result: The current price is 17.36 per ounce.

И вы можете управлять форматированием это значение:And you can control that value's formatting:

Decimal pricePerOunce = (Decimal)17.36;
String^ s = String::Format("The current price is {0:C2} per ounce.",
                           pricePerOunce);
// Result if current culture is en-US:
//      The current price is $17.36 per ounce.
Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0:C2} per ounce.",
                         pricePerOunce);
Console.WriteLine(s);
// Result if current culture is en-US:
//      The current price is $17.36 per ounce.
Dim pricePerOunce As Decimal = 17.36d
Dim s As String = String.Format("The current price is {0:C2} per ounce.",
                                pricePerOunce)
' Result if current culture is en-US:
'      The current price is $17.36 per ounce.

Помимо форматирование, можно также управлять интервал и выравнивание.Besides formatting, you can also control alignment and spacing.

Вставка строкиInserting a string

String.Format начинается с объекта строки формата, за которым следует один или несколько объектов, или выражений, которые будут преобразованы в строки и вставить в указанном месте в строке формата.String.Format starts with a format string, followed by one or more objects or expressions that will be converted to strings and inserted at a specified place in the format string. Например:For example:

Decimal temp = (Decimal)20.4;
String^ s = String::Format("The temperature is {0}°C.", temp);
Console::WriteLine(s);
// Displays 'The temperature is 20.4°C.'
decimal temp = 20.4m;
string s = String.Format("The temperature is {0}°C.", temp);
Console.WriteLine(s);
// Displays 'The temperature is 20.4°C.'
Dim temp As Decimal = 20.4d
Dim s As String = String.Format("The temperature is {0}°C.", temp)
Console.WriteLine(s)
' Displays 'The temperature is 20.4°C.'

{0} В формат строки — это элемент формата.The {0} in the format string is a format item. 0 — Это индекс объекта, значение которого строка будет вставлен в этой позиции.0 is the index of the object whose string value will be inserted at that position. (Индексы начинаются с 0). Если вставляемый объект не является строкой, его ToString метод вызывается для преобразования его на позицию перед вставкой в результирующей строке.(Indexes start at 0.) If the object to be inserted is not a string, its ToString method is called to convert it to one before inserting it in the result string.

Вот другой пример, использующий два формата элемента и два объекта в списке объектов:Here's another example that uses two format items and two objects in the object list:

String^ s = String::Format("At {0}, the temperature is {1}°C.",
                           DateTime::Now, 20.4);
// Output similar to: 'At 4/10/2015 9:29:41 AM, the temperature is 20.4°C.'
string s = String.Format("At {0}, the temperature is {1}°C.",
                         DateTime.Now, 20.4);
Console.WriteLine(s);
// Output similar to: 'At 4/10/2015 9:29:41 AM, the temperature is 20.4°C.'
Dim s As String = String.Format("At {0}, the temperature is {1}°C.",
                                Date.Now, 20.4)
' Output similar to: 'At 4/10/2015 9:29:41 AM, the temperature is 20.4°C.'

Может иметь столько элементов формата, и количество объектов в списке объектов, как вы хотите, пока индекс каждый элемент форматирования имеет соответствующий объект в списке объектов.You can have as many format items and as many objects in the object list as you want, as long as the index of every format item has a matching object in the object list. Вы также не нужно беспокоиться о какую перегрузку метода. компилятор будет выберите наиболее подходящий для вас.You also don't have to worry about which overload you call; the compiler will select the appropriate one for you.

Управление форматированиемControlling formatting

Вы можете следовать индекс в элементе форматирования строку формата для управления форматированием объекта.You can follow the index in a format item with a format string to control how an object is formatted. Например {0:d} применяет строки формата «d» для первого объекта в списке объектов.For example, {0:d} applies the "d" format string to the first object in the object list. Ниже приведен пример с одним объектом и два форматирования элементов:Here is an example with a single object and two format items:

String^ s = String::Format("It is now {0:d} at {0:t}",
                           DateTime::Now);
// Output similar to: 'It is now 4/10/2015 at 10:04 AM'
string s = String.Format("It is now {0:d} at {0:t}", DateTime.Now);
Console.WriteLine(s);
// Output similar to: 'It is now 4/10/2015 at 10:04 AM'
Dim s As String = String.Format("It is now {0:d} at {0:t}",
                                Date.Now)
' Output similar to: 'It is now 4/10/2015 at 10:04 AM'

Ряд типов поддержки строк формата, включая все числовые типы (оба стандартный и пользовательских форматирования строк), все значения даты и времени (оба стандартный и пользовательских строки форматов) и интервалы времени (оба стандартный и пользовательских строки форматов), всех типов перечислений типы перечисления , и идентификаторы GUID.A number of types support format strings, including all numeric types (both standard and custom format strings), all dates and times (both standard and custom format strings) and time intervals (both standard and custom format strings), all enumeration types enumeration types, and GUIDs. Также можно добавить поддержку для строки формата для собственных типов.You can also add support for format strings to your own types.

Управление интервалControlling spacing

Вы можете определить ширину строки, который вставляется в результирующую строку с помощью синтаксиса, такие как {0,12}, который вставляет строка 12 символов.You can define the width of the string that is inserted into the result string by using syntax such as {0,12}, which inserts a 12-character string. В этом случае строковое представление первого объекта по правому краю поля 12 символов.In this case, the string representation of the first object is right-aligned in the 12-character field. (Если строковое представление первого объекта больше 12 символов, однако желательной ширины поля учитывается и вся строка вставляется в результирующую строку.)(If the string representation of the first object is more than 12 characters in length, though, the preferred field width is ignored, and the entire string is inserted into the result string.)

В следующем примере определяется 6-символьное поле для хранения строки «Год» и некоторые строки год, а также 15-символьного поля для хранения строки «Заполнение» и некоторые данные о населении.The following example defines a 6-character field to hold the string "Year" and some year strings, as well as an 15-character field to hold the string "Population" and some population data. Обратите внимание на то, что символы являются по правому краю поля.Note that the characters are right-aligned in the field.

array<int>^ years = { 2013, 2014, 2015 };
array<int>^ population = { 1025632, 1105967, 1148203 };
StringBuiler^ sb = gcnew StringBuilder();
sb->Append(String::Format("{0,6} {1,15}\n\n", "Year", "Population"));
for(int index = 0; index < years->Length; index++)
   sb->AppendFormat("{0,6} {1,15:N0}\n",
                    years[index], population[index]);
// Result:
//      Year      Population
//
//      2013       1,025,632
//      2014       1,105,967
//      2015       1,148,203
using System;
using System.Text;
 
class Example
{
   public static void Main()
   {
       // <Snippet33>
       int[] years = { 2013, 2014, 2015 };
       int[] population = { 1025632, 1105967, 1148203 };
       var sb = new StringBuilder();
       sb.Append(String.Format("{0,6} {1,15}\n\n", "Year", "Population"));
       for (int index = 0; index < years.Length; index++)
          sb.Append(String.Format("{0,6} {1,15:N0}\n", years[index], population[index]));
  
       Console.WriteLine(sb);
   }
}  
// Result:
//      Year      Population
//
//      2013       1,025,632
//      2014       1,105,967
//      2015       1,148,203


Dim years() As Integer = { 2013, 2014, 2015 }
Dim population() As Integer  = { 1025632, 1105967, 1148203 }
Dim sb As New StringBuilder()
sb.Append(String.Format("{0,6} {1,15}{2}{2}",
                        "Year", "Population", vbCrLf))
For index As Integer = 0 To years.Length - 1
   sb.AppendFormat("{0,6} {1,15:N0}{2}",
                   years(index), population(index), vbCrLf)
Next
' Result:
'      Year      Population
'
'      2013       1,025,632
'      2014       1,105,967
'      2015       1,148,203

Управление выравниванияControlling alignment

По умолчанию строки по правому краю в своей сфере Если вы укажите ширину поля.By default, strings are right-aligned within their field if you specify a field width. Чтобы выровнять строки в поле слева, в начале ширина поля со знаком минус, такие как {0,-12} определение поля по левому краю 12 символов.To left-align strings in a field, you preface the field width with a negative sign, such as {0,-12} to define a 12-character left-aligned field.

Следующий пример аналогичен предыдущему, за исключением того, что он по левому краю и метки и данные.The following example is similar to the previous one, except that it left-aligns both labels and data.

array<int>^ years = { 2013, 2014, 2015 };
array<int>^ population = { 1025632, 1105967, 1148203 };
String^ s = String::Format("{0,-10} {1,-10}\n\n", "Year", "Population");
for(int index = 0; index < years->Length; index++)
   s += String::Format("{0,-10} {1,-10:N0}\n",
                      years[index], population[index]);
// Result:
//    Year       Population
//
//    2013       1,025,632
//    2014       1,105,967
//    2015       1,148,203
int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
String s = String.Format("{0,-10} {1,-10}\n\n", "Year", "Population");
for(int index = 0; index < years.Length; index++)
   s += String.Format("{0,-10} {1,-10:N0}\n",
                      years[index], population[index]);
Console.WriteLine($"\n{s}");
// Result:
//    Year       Population
//
//    2013       1,025,632
//    2014       1,105,967
//    2015       1,148,203
Dim years() As Integer = { 2013, 2014, 2015 }
Dim population() As Integer  = { 1025632, 1105967, 1148203 }
Dim s As String = String.Format("{0,-10} {1,-10}{2}{2}",
                                "Year", "Population", vbCrLf)
For index As Integer = 0 To years.Length - 1
   s += String.Format("{0,-10} {1,-10:N0}{2}",
                      years(index), population(index), vbCrLf)
Next
' Result:
'    Year       Population
'
'    2013       1,025,632
'    2014       1,105,967
'    2015       1,148,203

String.Format используется составное форматирование.String.Format makes use of the composite formatting feature. Дополнительные сведения см. в разделе Составное форматирование.For more information, see Composite Formatting.

Какой метод следует вызывать?Which method do I call?

КомуTo CallCall
Форматировать один или несколько объектов с помощью правил текущего языка и региональных параметров.Format one or more objects by using the conventions of the current culture. За исключением перегрузки, включающие provider параметра, оставшиеся Format включают перегрузки String параметр следуют один или несколько параметров объекта.Except for the overloads that include a provider parameter, the remaining Format overloads include a String parameter followed by one or more object parameters. По этой причине не нужно определить, какие Format вызываемая перегрузка.Because of this, you don't have to determine which Format overload you intend to call. Языковой компилятор выбирает соответствующую перегрузку из перегрузок, у которых нет provider параметру, основанному на ваш список аргументов.Your language compiler selects the appropriate overload from among the overloads that don't have a provider parameter, based on your argument list. Например, если ваш список аргументов содержит пять аргументов, компилятор вызывает Format(String, Object[]) метод.For example, if your argument list has five arguments, the compiler calls the Format(String, Object[]) method.
Форматировать один или несколько объектов с помощью правил конкретного языка и региональных параметров.Format one or more objects by using the conventions of a specific culture. Каждый Format перегрузку, которая начинается с provider следуют параметр String параметр и один или несколько объектов параметров.Each Format overload that begins with a provider parameter is followed by a String parameter and one or more object parameters. По этой причине не нужно определить, какие конкретно Format вызываемая перегрузка.Because of this, you don't have to determine which specific Format overload you intend to call. Языковой компилятор выбирает соответствующую перегрузку из перегрузок, имеющих provider параметру, основанному на ваш список аргументов.Your language compiler selects the appropriate overload from among the overloads that have a provider parameter, based on your argument list. Например, если ваш список аргументов содержит пять аргументов, компилятор вызывает Format(IFormatProvider, String, Object[]) метод.For example, if your argument list has five arguments, the compiler calls the Format(IFormatProvider, String, Object[]) method.
Выполнять пользовательские операции форматирования, либо с ICustomFormatter реализации или IFormattable реализации.Perform a custom formatting operation either with an ICustomFormatter implementation or an IFormattable implementation. Любой из четырех перегрузок provider параметра.Any of the four overloads with a provider parameter. Компилятор выбирает соответствующую перегрузку из перегрузок, имеющих provider параметру, основанному на ваш список аргументов.The compiler selects the appropriate overload from among the overloads that have a provider parameter, based on your argument list.

Метод Format краткое описаниеThe Format method in brief

Каждая перегрузка Format использует метод составного форматирования для включения отсчитываемый от нуля индексированные местозаполнители, форматирования элементов, в строке составного формата.Each overload of the Format method uses the composite formatting feature to include zero-based indexed placeholders, called format items, in a composite format string. Во время выполнения каждый элемент формата заменяется строковым представлением соответствующего аргумента в списке параметров.At run time, each format item is replaced with the string representation of the corresponding argument in a parameter list. Если значение аргумента равно null, элемент формата заменяется String.Empty.If the value of the argument is null, the format item is replaced with String.Empty. Например, следующий вызов Format(String, Object, Object, Object) метод включает строку формата с тремя элементами форматирования, {0}, {1}, и {2}и список аргументов с тремя элементами.For example, the following call to the Format(String, Object, Object, Object) method includes a format string with three format items, {0}, {1}, and {2}, and an argument list with three items.

using namespace System;

void main()
{
   DateTime^ dat = gcnew DateTime(2012, 1, 17, 9, 30, 0); 
   String^ city = "Chicago";
   int temp = -16;
   String^ output = String::Format("At {0} in {1}, the temperature was {2} degrees.",
                                   dat, city, temp);
   Console::WriteLine(output);
}
// The example displays the following output: 
//    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   
DateTime dat = new DateTime(2012, 1, 17, 9, 30, 0); 
string city = "Chicago";
int temp = -16;
string output = String.Format("At {0} in {1}, the temperature was {2} degrees.",
                              dat, city, temp);
Console.WriteLine(output);
// The example displays output like the following:
//    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   
Dim dat As Date = #1/17/2012 9:30AM# 
Dim city As String = "Chicago"
Dim temp As Integer = -16
Dim output As String = String.Format("At {0} in {1}, the temperature was {2} degrees.",
                                     dat, city, temp)
Console.WriteLine(output)
' The example displays the following output:
'    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   

Элемент форматаThe format item

Элемент форматирования имеет следующий синтаксис:A format item has this syntax:

{index[,alignment][:formatString]}  

Квадратные скобки обозначают необязательные элементы.Brackets denote optional elements. Требуются открывающей и закрывающей фигурными скобками.The opening and closing braces are required. (Для включения литерала открывающий или закрывающая фигурная скобка в строке формата, см. в разделе экранирование фигурных скобок статьи составное форматирование статьи.)(To include a literal opening or closing brace in the format string, see the Escaping Braces section in the Composite Formatting article.)

Например элемент форматирования для форматирования значения валюты может отображаться следующим образом:For example, a format item to format a currency value might appear like this:

String::Format("{0,-10:C}", (Decimal) 126347.89);         
var value = String.Format("{0,-10:C}", 126347.89m);         
Console.WriteLine(value);
String.Format("{0,-10:C}", 126347.89d)        

Элемент форматирования имеет следующие элементы:A format item has the following elements:

Индексindex
Отсчитываемый от нуля индекс аргумента, строковое представление которого должен быть включен в этой позиции в строке.The zero-based index of the argument whose string representation is to be included at this position in the string. Если этот аргумент равен null, пустая строка будет включен в этой позиции в строке.If this argument is null, an empty string will be included at this position in the string.

Выравниваниеalignment
Необязательный параметр.Optional. Знаковое целое число, которое указывает общую длину поля, в которое вставляется аргумент и по правому краю (положительное целое число) или по левому краю (отрицательное целое число).A signed integer that indicates the total length of the field into which the argument is inserted and whether it is right-aligned (a positive integer) or left-aligned (a negative integer). Если опустить выравнивание, строковым представлением соответствующего аргумента вставляется в поле без начальных или конечных пробелов.If you omit alignment, the string representation of the corresponding argument is inserted in a field with no leading or trailing spaces.

Если значение выравнивание меньше, чем длина аргумента должны быть вставлены, выравнивание игнорируется и длина строкового представления для аргумента используется в качестве значения ширины поля.If the value of alignment is less than the length of the argument to be inserted, alignment is ignored and the length of the string representation of the argument is used as the field width.

formatStringformatString
Необязательный параметр.Optional. Строка, указывающая формат строки соответствующего аргумента результат.A string that specifies the format of the corresponding argument's result string. Если опустить formatString, соответствующего аргумента без параметров ToString метод вызывается для получения строкового представления.If you omit formatString, the corresponding argument's parameterless ToString method is called to produce its string representation. Если указать formatString, аргумент, который ссылается элемент форматирования должен реализовывать IFormattable интерфейс.If you specify formatString, the argument referenced by the format item must implement the IFormattable interface. Типы, которые поддерживают формат строки:Types that support format strings include:

Тем не менее, обратите внимание, что любой пользовательский тип можно реализовать IFormattable или расширить существующий тип IFormattable реализации.However, note that any custom type can implement IFormattable or extend an existing type's IFormattable implementation.

В следующем примере используется alignment и formatString аргументы для создания Форматированные выходные данные.The following example uses the alignment and formatString arguments to produce formatted output.

using namespace System;

void main()
{
   // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
   array<Tuple<String^, DateTime, int, DateTime, int>^>^ cities = gcnew array<Tuple<String^, DateTime, int, DateTime, int>^> 
         { gcnew Tuple<String^, DateTime, int, DateTime, int>("Los Angeles", DateTime(1940, 1, 1), 1504277, 
                        DateTime(1950, 1, 1), 1970358),
         gcnew Tuple<String^, DateTime, int, DateTime, int>("New York", DateTime(1940, 1, 1), 7454995, 
                        DateTime(1950, 1, 1), 7891957),  
         gcnew Tuple<String^, DateTime, int, DateTime, int>("Chicago", DateTime(1940, 1, 1), 3396808, 
                        DateTime(1950, 1, 1), 3620962),  
         gcnew Tuple<String^, DateTime, int, DateTime, int>("Detroit", DateTime(1940, 1, 1), 1623452, 
                        DateTime(1950, 1, 1), 1849568) };

   // Display header
   String^ header = String::Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                   "City", "Year", "Population", "Change (%)");
   Console::WriteLine(header);
   String^ output;      
   for each (Tuple<String^, DateTime, int, DateTime, int>^ city in cities) {
      output = String::Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                              city->Item1, city->Item2, city->Item3, city->Item4, city->Item5,
                              (city->Item5 - city->Item3)/ (double)city->Item3);
      Console::WriteLine(output);
   }
}
// The example displays the following output:
//    City            Year  Population    Year  Population    Change (%)
//    
//    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
//    New York        1940   7,454,995    1950   7,891,957         5.9 %
//    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
//    Detroit         1940   1,623,452    1950   1,849,568        13.9 %
using System;

public class Example
{
   public static void Main()
   {
      // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
      Tuple<string, DateTime, int, DateTime, int>[] cities = 
          { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                         new DateTime(1950, 1, 1), 1970358),
            Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                         new DateTime(1950, 1, 1), 7891957),  
            Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                         new DateTime(1950, 1, 1), 3620962),  
            Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                         new DateTime(1950, 1, 1), 1849568) };

      // Display header
      var header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                    "City", "Year", "Population", "Change (%)");
      Console.WriteLine(header);
      foreach (var city in cities) {
         var output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                (city.Item5 - city.Item3)/ (double)city.Item3);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//    City            Year  Population    Year  Population    Change (%)
//    
//    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
//    New York        1940   7,454,995    1950   7,891,957         5.9 %
//    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
//    Detroit         1940   1,623,452    1950   1,849,568        13.9 %
Module Example
   Public Sub Main()
      ' Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
      Dim cities()  = _
          { Tuple.Create("Los Angeles", #1/1/1940#, 1504277, #1/1/1950#, 1970358),
            Tuple.Create("New York", #1/1/1940#, 7454995, #1/1/1950#, 7891957),  
            Tuple.Create("Chicago", #1/1/1940#, 3396808, #1/1/1950#, 3620962),  
            Tuple.Create("Detroit", #1/1/1940#, 1623452, #1/1/1950#, 1849568) }

      ' Display header
      Dim header As String = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}",
                                           "City", "Year", "Population", "Change (%)")
      Console.WriteLine(header)
      Console.WriteLine()
      For Each city In cities
         Dim output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                (city.Item5 - city.Item3)/city.Item3)
         Console.WriteLine(output)
      Next
   End Sub
End Module
' The example displays the following output:
'    City            Year  Population    Year  Population    Change (%)
'    
'    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
'    New York        1940   7,454,995    1950   7,891,957         5.9 %
'    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
'    Detroit         1940   1,623,452    1950   1,849,568        13.9 %

Каким образом форматируются аргументовHow arguments are formatted

Элементы форматирования обрабатываются последовательно от начала строки.Format items are processed sequentially from the beginning of the string. Каждый элемент формата имеет индекс, соответствующий объект в списке аргументов метода.Each format item has an index that corresponds to an object in the method's argument list. Format Метод получает аргумент и наследует его строковое представление следующим образом:The Format method retrieves the argument and derives its string representation as follows:

  • Если аргумент является null, то метод вставляет String.Empty в результирующую строку.If the argument is null, the method inserts String.Empty into the result string. У вас нет необходимости заботиться о обработки NullReferenceException для аргументов, значение null.You don't have to be concerned with handling a NullReferenceException for null arguments.

  • При вызове метода Format(IFormatProvider, String, Object[]) перегрузки и provider объекта IFormatProvider.GetFormat реализация возвращает ненулевой ICustomFormatter , аргумент передается реализация его ICustomFormatter.Format(String, Object, IFormatProvider) метод.If you call the Format(IFormatProvider, String, Object[]) overload and the provider object's IFormatProvider.GetFormat implementation returns a non-null ICustomFormatter implementation, the argument is passed to its ICustomFormatter.Format(String, Object, IFormatProvider) method. Если элемент формата включает formatString аргумент, он передается в качестве первого аргумента метода.If the format item includes a formatString argument, it is passed as the first argument to the method. Если ICustomFormatter реализация доступна и создает строку, отличных от null, которая строковое представление аргумента, возвращается строка; в противном случае выполняет следующий шаг.If the ICustomFormatter implementation is available and produces a non-null string, that string is returned as the string representation of the argument; otherwise, the next step executes.

  • Если аргумент реализует IFormattable интерфейс, его IFormattable.ToString вызывается реализация.If the argument implements the IFormattable interface, its IFormattable.ToString implementation is called.

  • С аргументом-по без параметров ToString вызывается метод, который переопределяет или наследует от реализации базового класса,.The argument's parameterless ToString method, which either overrides or inherits from a base class implementation, is called.

Например, который перехватывает вызовы ICustomFormatter.Format метод и позволяет увидеть, какие сведения Format передает метод в метод форматирования для каждого элемента форматирования в строке составного формата, см. в разделе пример: Поставщик отсекаемый отрезок и модуль форматирования римские цифры.For an example that intercepts calls to the ICustomFormatter.Format method and allows you to see what information the Format method passes to a formatting method for each format item in a composite format string, see Example: An intercept provider and Roman numeral formatter.

Дополнительные сведения см. в разделе порядок обработки статьи составное форматирование статьи.For more information, see the Processing Order section in the Composite Formatting article.

Формат элементы, имеющие тот же индексFormat items that have the same index

Format Вызывает метод FormatException исключение, если индекс элемента индекс больше или равно числу аргументов в списке аргументов.The Format method throws a FormatException exception if the index of an index item is greater than or equal to the number of arguments in the argument list. Тем не менее format может включать несколько элементов формата, превышает количество аргументов, поскольку несколько элементов формата имеют тот же индекс.However, format can include more format items than there are arguments, as long as multiple format items have the same index. В вызове Format(String, Object) метод в следующем примере список аргументов имеет один аргумент, но строка форматирования содержит два элемента форматирования: один отображается десятичное значение для числа, а другой шестнадцатеричное значение.In the call to the Format(String, Object) method in following example, the argument list has a single argument, but the format string includes two format items: one displays the decimal value of a number, and the other displays its hexadecimal value.

public class Example
{
   public static void Main()
   {
      short[] values= { Int16.MinValue, -27, 0, 1042, Int16.MaxValue };
      Console.WriteLine("{0,10}  {1,10}\n", "Decimal", "Hex");
      foreach (short value in values)
      {
         string formatString = String.Format("{0,10:G}: {0,10:X}", value);
         Console.WriteLine(formatString);
      }   
   }
}
// The example displays the following output:
//       Decimal         Hex
//    
//        -32768:       8000
//           -27:       FFE5
//             0:          0
//          1042:        412
//         32767:       7FFF
Module Example
   Public Sub Main()
      Dim values() As Short = { Int16.MinValue, -27, 0, 1042, Int16.MaxValue }
      Console.WriteLine("{0,10}  {1,10}", "Decimal", "Hex")
      Console.WriteLine()
      For Each value As Short In values
         Dim formatString As String = String.Format("{0,10:G}: {0,10:X}", value)
         Console.WriteLine(formatString)
      Next        
   End Sub
End Module
' The example displays the following output:
'       Decimal         Hex
'    
'        -32768:       8000
'           -27:       FFE5
'             0:          0
'          1042:        412
'         32767:       7FFF

Форматирование и языка и региональных параметровFormatting and culture

Как правило, объекты в списке аргументов, преобразуются в их строковые представления с помощью правил текущего языка и региональных параметров, который возвращается методом CultureInfo.CurrentCulture свойство.Generally, objects in the argument list are converted to their string representations by using the conventions of the current culture, which is returned by the CultureInfo.CurrentCulture property. Этим поведением можно управлять путем вызова одной из перегрузок Format , включающий provider параметра.You can control this behavior by calling one of the overloads of Format that includes a provider parameter. provider Параметр IFormatProvider обрабатывать реализацию, которая предоставляет пользовательские и зависящие от языка и региональных параметров информации форматирования, которая используется средний форматирование.The provider parameter is an IFormatProvider implementation that supplies custom and culture-specific formatting information that is used to moderate the formatting process.

IFormatProvider Интерфейс содержит только один член — GetFormat, который отвечает за возвращение объект, предоставляющий сведения о форматировании.The IFormatProvider interface has a single member, GetFormat, which is responsible for returning the object that provides formatting information. .NET имеет три IFormatProvider реализациями, которые предоставляют форматирования, зависящего от языка и региональных параметров:.NET has three IFormatProvider implementations that provide culture-specific formatting:

  • CultureInfo.CultureInfo. Его GetFormat метод возвращает конкретный язык и региональные параметры NumberFormatInfo объект для форматирования числовых значений и зависящих от языка и региональных параметров DateTimeFormatInfo объект для форматирования значений даты и времени.Its GetFormat method returns a culture-specific NumberFormatInfo object for formatting numeric values and a culture-specific DateTimeFormatInfo object for formatting date and time values.

  • DateTimeFormatInfo, используемый для форматирования значений даты и времени, зависящего от языка и региональных параметров.DateTimeFormatInfo, which is used for culture-specific formatting of date and time values. Его GetFormat метод возвращает сам себя.Its GetFormat method returns itself.

  • NumberFormatInfo, который используется для форматирования числовых значений, зависящего от языка и региональных параметров.NumberFormatInfo, which is used for culture-specific formatting of numeric values. Его GetFormat свойство возвращает сам себя.Its GetFormat property returns itself.

Настраиваемое форматирование операцийCustom formatting operations

Можно также вызвать любой из перегрузок Format метода, который имеет provider параметр типа IFormatProvider для выполнения пользовательских операций форматирования.You can also call the any of the overloads of the Format method that have a provider parameter of type IFormatProvider to perform custom formatting operations. Например вы форматирования целого числа, как идентификатор или номер телефона.For example, you could format an integer as an identification number or as a telephone number. Для выполнения пользовательского форматирования вашей provider аргумент следует реализовать и IFormatProvider и ICustomFormatter интерфейсов.To perform custom formatting, your provider argument must implement both the IFormatProvider and ICustomFormatter interfaces. Когда Format методу передается ICustomFormatter реализации в качестве provider аргумент, Format вызовы методов его IFormatProvider.GetFormat реализации и запрашивает объект типа ICustomFormatter.When the Format method is passed an ICustomFormatter implementation as the provider argument, the Format method calls its IFormatProvider.GetFormat implementation and requests an object of type ICustomFormatter. Затем он вызывает возвращенного ICustomFormatter объекта Format переданного ему метод, чтобы каждый элемент формата в строке составного формата.It then calls the returned ICustomFormatter object's Format method to format each format item in the composite string passed to it.

Дополнительные сведения о предоставлении пользовательских решений форматирования см. в разделе как: Определение и использование настраиваемых поставщиков числовых форматов и ICustomFormatter.For more information about providing custom formatting solutions, see How to: Define and Use Custom Numeric Format Providers and ICustomFormatter. Пример, преобразует пользовательские числа целых чисел, см. в разделе пример: Пользовательские операции форматирования.For an example that converts integers to formatted custom numbers, see Example: A custom formatting operation. Пример, который преобразует римские цифры байтов без знака, см. в разделе пример: Поставщик отсекаемый отрезок и модуль форматирования римские цифры.For an example that converts unsigned bytes to Roman numerals, see Example: An intercept provider and Roman numeral formatter.

Пример Пользовательские операции форматированияExample: A custom formatting operation

В этом примере определяется поставщик формата, который форматирует целочисленное значение в виде номера счета заказчика в форме x-xxxxx-xx.This example defines a format provider that formats an integer value as a customer account number in the form x-xxxxx-xx.

using namespace System;

ref class CustomerFormatter : IFormatProvider, ICustomFormatter
{
public:
   virtual Object^ GetFormat(Type^ formatType) 
   {
      if (formatType == ICustomFormatter::typeid)        
         return this; 
      else 
         return nullptr; 
   }
   
   virtual String^ Format(String^ format, 
	               Object^ arg, 
	               IFormatProvider^ formatProvider) 
   {                       
      if (! this->Equals(formatProvider))
      {
         return nullptr;
      }
      else
      {
         if (String::IsNullOrEmpty(format)) 
            format = "G";
         
         String^ customerString = arg->ToString();
         if (customerString->Length < 8)
            customerString = customerString->PadLeft(8, '0');
         
         format = format->ToUpper();
         if (format == L"G") 
               return customerString->Substring(0, 1) + "-" +
                                     customerString->Substring(1, 5) + "-" +
                                     customerString->Substring(6);
         else if (format == L"S")                          
               return customerString->Substring(0, 1) + "/" +
                                     customerString->Substring(1, 5) + "/" +
                                     customerString->Substring(6);
         else if (format == L"P")
               return customerString->Substring(0, 1) + "." +
                                     customerString->Substring(1, 5) + "." +
                                     customerString->Substring(6);
         else
               throw gcnew FormatException( 
                         String::Format("The '{0}' format specifier is not supported.", format));
         }
    }   
};

void main()
{
   int acctNumber = 79203159;
   Console::WriteLine(String::Format(gcnew CustomerFormatter, "{0}", acctNumber));
   Console::WriteLine(String::Format(gcnew CustomerFormatter, "{0:G}", acctNumber));
   Console::WriteLine(String::Format(gcnew CustomerFormatter, "{0:S}", acctNumber));
   Console::WriteLine(String::Format(gcnew CustomerFormatter, "{0:P}", acctNumber));
   try {
      Console::WriteLine(String::Format(gcnew CustomerFormatter, "{0:X}", acctNumber));
   }
   catch (FormatException^ e) {
      Console::WriteLine(e->Message);
   }
}
// The example displays the following output:
//       7-92031-59
//       7-92031-59
//       7/92031/59
//       7.92031.59
//       The 'X' format specifier is not supported.
using System;

public class TestFormatter
{
   public static void Main()
   {
      int acctNumber = 79203159;
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:G}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:S}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:P}", acctNumber));
      try {
         Console.WriteLine(String.Format(new CustomerFormatter(), "{0:X}", acctNumber));
      }
      catch (FormatException e) {
         Console.WriteLine(e.Message);
      }
   }
}

public class CustomerFormatter : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType) 
   {
      if (formatType == typeof(ICustomFormatter))        
         return this; 
      else
         return null;
   }
   
   public string Format(string format, 
	                     object arg, 
	                     IFormatProvider formatProvider) 
   {                       
      if (! this.Equals(formatProvider))
      {
         return null;
      }
      else
      {
         if (String.IsNullOrEmpty(format)) 
            format = "G";
         
         string customerString = arg.ToString();
         if (customerString.Length < 8)
            customerString = customerString.PadLeft(8, '0');
         
         format = format.ToUpper();
         switch (format)
         {
            case "G":
               return customerString.Substring(0, 1) + "-" +
                                     customerString.Substring(1, 5) + "-" +
                                     customerString.Substring(6);
            case "S":                          
               return customerString.Substring(0, 1) + "/" +
                                     customerString.Substring(1, 5) + "/" +
                                     customerString.Substring(6);
            case "P":                          
               return customerString.Substring(0, 1) + "." +
                                     customerString.Substring(1, 5) + "." +
                                     customerString.Substring(6);
            default:
               throw new FormatException( 
                         String.Format("The '{0}' format specifier is not supported.", format));
         }
      }   
   }
}
// The example displays the following output:
//       7-92031-59
//       7-92031-59
//       7/92031/59
//       7.92031.59
//       The 'X' format specifier is not supported.
Module TestFormatter
   Public Sub Main()
      Dim acctNumber As Integer = 79203159
      Console.WriteLine(String.Format(New CustomerFormatter, "{0}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:G}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:S}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:P}", acctNumber))
      Try
         Console.WriteLine(String.Format(New CustomerFormatter, "{0:X}", acctNumber))
      Catch e As FormatException
         Console.WriteLine(e.Message)
      End Try   
   End Sub
End Module

Public Class CustomerFormatter : Implements IFormatProvider, ICustomFormatter
   Public Function GetFormat(type As Type) As Object  _
                   Implements IFormatProvider.GetFormat
      If type Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function
   
   Public Function Format(fmt As String, _
	                       arg As Object, _
	                       formatProvider As IFormatProvider) As String _
	                Implements ICustomFormatter.Format
      If Not Me.Equals(formatProvider) Then
         Return Nothing
      Else
         If String.IsNullOrEmpty(fmt) Then fmt = "G"
         
         Dim customerString As String = arg.ToString()
         if customerString.Length < 8 Then _
            customerString = customerString.PadLeft(8, "0"c)
         
         Select Case fmt
            Case "G"
               Return customerString.Substring(0, 1) & "-" & _
                                     customerString.Substring(1, 5) & "-" & _
                                     customerString.Substring(6)
            Case "S"                         
               Return customerString.Substring(0, 1) & "/" & _
                                     customerString.Substring(1, 5) & "/" & _
                                     customerString.Substring(6)
            Case "P"
               Return customerString.Substring(0, 1) & "." & _
                                     customerString.Substring(1, 5) & "." & _
                                     customerString.Substring(6)
            Case Else
               Throw New FormatException( _
                         String.Format("The '{0}' format specifier is not supported.", fmt))
         End Select                                                     
      End If   
   End Function
End Class
' The example displays the following output:
'       7-92031-59
'       7-92031-59
'       7/92031/59
'       7.92031.59
'       The 'X' format specifier is not supported.

Пример Поставщик отсекаемый отрезок и модуль форматирования римские цифрыExample: An intercept provider and Roman numeral formatter

В этом примере определяется поставщик настраиваемого формата, который реализует ICustomFormatter и IFormatProvider интерфейсов, чтобы сделать две вещи:This example defines a custom format provider that implements the ICustomFormatter and IFormatProvider interfaces to do two things:

  • Он отображает параметры, передаваемые его ICustomFormatter.Format реализации.It displays the parameters passed to its ICustomFormatter.Format implementation. Это позволяет нам знать, какие параметры Format(IFormatProvider, String, Object[]) метод передает на пользовательскую реализацию форматирования для каждого объекта, он пытается форматирования.This enables us to see what parameters the Format(IFormatProvider, String, Object[]) method is passing to the custom formatting implementation for each object that it tries to format. Это может быть полезно при отладке приложения.This can be useful when you're debugging your application.

  • Если объект форматируемое значение типа byte без знака, необходимо отформатировать с помощью строки стандартного формата «R», пользовательский модуль форматирования форматирует числовое значение в виде римские цифры.If the object to be formatted is an unsigned byte value that is to be formatted by using the "R" standard format string, the custom formatter formats the numeric value as a Roman numeral.

using namespace System;
using namespace System::Globalization;

ref class InterceptProvider : IFormatProvider, ICustomFormatter
{
public:
   virtual Object^ GetFormat(Type^ formatType)
   {
      if (formatType == ICustomFormatter::typeid)   
         return this;
      else
         return nullptr;
   }
   
   virtual String^ Format(String^ format, Object^ obj, IFormatProvider^ provider) 
   {
      // Display information about method call.
      String^ formatString = format != nullptr ? format : "<null>";
      Console::WriteLine("Provider: {0}, Object: {1}, Format String: {2}",
                        provider, obj != nullptr ? obj : "<null>", formatString);
                        
      if (obj == nullptr) return String::Empty;
            
      // If this is a byte and the "R" format string, format it with Roman numerals.
      if (obj->GetType() == Byte::typeid && formatString->ToUpper()->Equals("R")) {
         Byte value = (Byte) obj;
         int remainder;
         int result;
         String^ returnString = String::Empty;

         // Get the hundreds digit(s)
         result = Math::DivRem(value, 100, remainder);
         if (result > 0)  
            returnString = gcnew String('C', result);
         value = (Byte) remainder;
         // Get the 50s digit
         result = Math::DivRem(value, 50, remainder);
         if (result == 1)
            returnString += "L";
         value = (Byte) remainder;
         // Get the tens digit.
         result = Math::DivRem(value, 10, remainder);
         if (result > 0)
            returnString += gcnew String('X', result);
         value = (Byte) remainder; 
         // Get the fives digit.
         result = Math::DivRem(value, 5, remainder);
         if (result > 0)
            returnString += "V";
         value = (Byte) remainder;
         // Add the ones digit.
         if (remainder > 0) 
            returnString += gcnew String('I', remainder);
         
         // Check whether we have too many X characters.
         int pos = returnString->IndexOf("XXXX");
         if (pos >= 0) {
            int xPos = returnString->IndexOf("L"); 
            if ((xPos >= 0) & (xPos == pos - 1))
               returnString = returnString->Replace("LXXXX", "XC");
            else
               returnString = returnString->Replace("XXXX", "XL");   
         }
         // Check whether we have too many I characters
         pos = returnString->IndexOf("IIII");
         if (pos >= 0)
            if (returnString->IndexOf("V") >= 0)
               returnString = returnString->Replace("VIIII", "IX");
            else
               returnString = returnString->Replace("IIII", "IV");    

         return returnString; 
      }   

      // Use default for all other formatting.
      if (obj->GetType() == IFormattable::typeid)
         return ((IFormattable^) obj)->ToString(format, CultureInfo::CurrentCulture);
      else
         return obj->ToString();
   }
};

void main()
{
   int n = 10;
   double value = 16.935;
   DateTime day = DateTime::Now;
   InterceptProvider^ provider = gcnew InterceptProvider();
   Console::WriteLine(String::Format(provider, "{0:N0}: {1:C2} on {2:d}\n", n, value, day));
   Console::WriteLine(String::Format(provider, "{0}: {1:F}\n", "Today: ", 
                                    (DayOfWeek) DateTime::Now.DayOfWeek));
   Console::WriteLine(String::Format(provider, "{0:X}, {1}, {2}\n", 
                                    (Byte) 2, (Byte) 12, (Byte) 199));
   Console::WriteLine(String::Format(provider, "{0:R}, {1:R}, {2:R}\n", 
                                    (Byte) 2, (Byte) 12, (Byte) 199));
}
// The example displays the following output:
//    Provider: InterceptProvider, Object: 10, Format String: N0
//    Provider: InterceptProvider, Object: 16.935, Format String: C2
//    Provider: InterceptProvider, Object: 1/31/2013 6:10:28 PM, Format String: d
//    10: $16.94 on 1/31/2013
//    
//    Provider: InterceptProvider, Object: Today: , Format String: <null>
//    Provider: InterceptProvider, Object: Thursday, Format String: F
//    Today: : Thursday
//    
//    Provider: InterceptProvider, Object: 2, Format String: X
//    Provider: InterceptProvider, Object: 12, Format String: <null>
//    Provider: InterceptProvider, Object: 199, Format String: <null>
//    2, 12, 199
//    
//    Provider: InterceptProvider, Object: 2, Format String: R
//    Provider: InterceptProvider, Object: 12, Format String: R
//    Provider: InterceptProvider, Object: 199, Format String: R
//    II, XII, CXCIX
using System;
using System.Globalization;

public class InterceptProvider : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }
   
   public string Format(String format, Object obj, IFormatProvider provider) 
   {
      // Display information about method call.
      string formatString = format ?? "<null>";
      Console.WriteLine("Provider: {0}, Object: {1}, Format String: {2}",
                        provider.GetType().Name, obj ?? "<null>", formatString);
                        
      if (obj == null) return String.Empty;
            
      // If this is a byte and the "R" format string, format it with Roman numerals.
      if (obj is Byte && formatString.ToUpper().Equals("R")) {
         Byte value = (Byte) obj;
         int remainder;
         int result;
         String returnString = String.Empty;

         // Get the hundreds digit(s)
         result = Math.DivRem(value, 100, out remainder);
         if (result > 0)  
            returnString = new String('C', result);
         value = (Byte) remainder;
         // Get the 50s digit
         result = Math.DivRem(value, 50, out remainder);
         if (result == 1)
            returnString += "L";
         value = (Byte) remainder;
         // Get the tens digit.
         result = Math.DivRem(value, 10, out remainder);
         if (result > 0)
            returnString += new String('X', result);
         value = (Byte) remainder; 
         // Get the fives digit.
         result = Math.DivRem(value, 5, out remainder);
         if (result > 0)
            returnString += "V";
         value = (Byte) remainder;
         // Add the ones digit.
         if (remainder > 0) 
            returnString += new String('I', remainder);
         
         // Check whether we have too many X characters.
         int pos = returnString.IndexOf("XXXX");
         if (pos >= 0) {
            int xPos = returnString.IndexOf("L"); 
            if (xPos >= 0 & xPos == pos - 1)
               returnString = returnString.Replace("LXXXX", "XC");
            else
               returnString = returnString.Replace("XXXX", "XL");   
         }
         // Check whether we have too many I characters
         pos = returnString.IndexOf("IIII");
         if (pos >= 0)
            if (returnString.IndexOf("V") >= 0)
               returnString = returnString.Replace("VIIII", "IX");
            else
               returnString = returnString.Replace("IIII", "IV");    

         return returnString; 
      }   

      // Use default for all other formatting.
      if (obj is IFormattable)
         return ((IFormattable) obj).ToString(format, CultureInfo.CurrentCulture);
      else
         return obj.ToString();
   }
}

public class Example
{
   public static void Main()
   {
      int n = 10;
      double value = 16.935;
      DateTime day = DateTime.Now;
      InterceptProvider provider = new InterceptProvider();
      Console.WriteLine(String.Format(provider, "{0:N0}: {1:C2} on {2:d}\n", n, value, day));
      Console.WriteLine(String.Format(provider, "{0}: {1:F}\n", "Today: ", 
                                      (DayOfWeek) DateTime.Now.DayOfWeek));
      Console.WriteLine(String.Format(provider, "{0:X}, {1}, {2}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
      Console.WriteLine(String.Format(provider, "{0:R}, {1:R}, {2:R}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
   }
}
// The example displays the following output:
//    Provider: InterceptProvider, Object: 10, Format String: N0
//    Provider: InterceptProvider, Object: 16.935, Format String: C2
//    Provider: InterceptProvider, Object: 1/31/2013 6:10:28 PM, Format String: d
//    10: $16.94 on 1/31/2013
//    
//    Provider: InterceptProvider, Object: Today: , Format String: <null>
//    Provider: InterceptProvider, Object: Thursday, Format String: F
//    Today: : Thursday
//    
//    Provider: InterceptProvider, Object: 2, Format String: X
//    Provider: InterceptProvider, Object: 12, Format String: <null>
//    Provider: InterceptProvider, Object: 199, Format String: <null>
//    2, 12, 199
//    
//    Provider: InterceptProvider, Object: 2, Format String: R
//    Provider: InterceptProvider, Object: 12, Format String: R
//    Provider: InterceptProvider, Object: 199, Format String: R
//    II, XII, CXCIX
Imports System.Globalization

Public Class InterceptProvider : Implements IFormatProvider, ICustomFormatter
   Public Function GetFormat(formatType As Type) As Object _
         Implements IFormatProvider.GetFormat
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function
   
   Public Function Format(fmt As String, obj As Object, provider As IFormatProvider) As String _
         Implements ICustomFormatter.Format

      Dim formatString As String = If(fmt IsNot Nothing, fmt, "<null>")
      Console.WriteLine("Provider: {0}, Object: {1}, Format String: {2}",
                        provider, If(obj IsNot Nothing, obj, "<null>"), formatString)

      If obj Is Nothing Then Return String.Empty
            
      ' If this is a byte and the "R" format string, format it with Roman numerals.
      If TypeOf(obj) Is Byte AndAlso formatString.ToUpper.Equals("R") Then
         Dim value As Byte = CByte(obj)
         Dim remainder As Integer
         Dim result As Integer
         Dim returnString As String = String.Empty

         ' Get the hundreds digit(s)
         result = Math.DivRem(value, 100, remainder)
         If result > 0 Then returnString = New String("C"c, result)
         value = CByte(remainder)
         ' Get the 50s digit
         result = Math.DivRem(value, 50, remainder)
         If result = 1 Then returnString += "L"
         value = CByte(remainder)
         ' Get the tens digit.
         result = Math.DivRem(value, 10, remainder)
         If result > 0 Then returnString += New String("X"c, result)
         value = CByte(remainder) 
         ' Get the fives digit.
         result = Math.DivRem(value, 5, remainder)
         If result > 0 Then returnString += "V"
         value = CByte(remainder)
         ' Add the ones digit.
         If remainder > 0 Then returnString += New String("I"c, remainder)
         
         ' Check whether we have too many X characters.
         Dim pos As Integer = returnString.IndexOf("XXXX")
         If pos >= 0 Then
            Dim xPos As Integer = returnString.IndexOf("L") 
            If xPos >= 0 And xPos = pos - 1 Then
               returnString = returnString.Replace("LXXXX", "XC")
            Else
               returnString = returnString.Replace("XXXX", "XL")   
            End If         
         End If
         ' Check whether we have too many I characters
         pos = returnString.IndexOf("IIII")
         If pos >= 0 Then
            If returnString.IndexOf("V") >= 0 Then
               returnString = returnString.Replace("VIIII", "IX")
            Else
               returnString = returnString.Replace("IIII", "IV")    
            End If
         End If
         Return returnString 
      End If   

      ' Use default for all other formatting.
      If obj Is GetType(IFormattable)
         Return CType(obj, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
      Else
         Return obj.ToString()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim n As Integer = 10
      Dim value As Double = 16.935
      Dim day As DateTime = Date.Now
      Dim provider As New InterceptProvider()
      Console.WriteLine(String.Format(provider, "{0:N0}: {1:C2} on {2:d}", n, value, day))
      Console.WriteLine()
      Console.WriteLine(String.Format(provider, "{0}: {1:F}", "Today", 
                                      CType(Date.Now.DayOfWeek, DayOfWeek)))
      Console.WriteLine()
      Console.WriteLine(String.Format(provider, "{0:X}, {1}, {2}\n", 
                                      CByte(2), CByte(12), CByte(199)))
      Console.WriteLine()
      Console.WriteLine(String.Format(provider, "{0:R}, {1:R}, {2:R}", 
                                      CByte(2), CByte(12), CByte(199)))
   End Sub
End Module
' The example displays the following output:
'    Provider: InterceptProvider, Object: 10, Format String: N0
'    Provider: InterceptProvider, Object: 16.935, Format String: C2
'    Provider: InterceptProvider, Object: 1/31/2013 6:10:28 PM, Format String: d
'    10: $16.94 on 1/31/2013
'    
'    Provider: InterceptProvider, Object: Today: , Format String: <null>
'    Provider: InterceptProvider, Object: Thursday, Format String: F
'    Today: : Thursday
'    
'    Provider: InterceptProvider, Object: 2, Format String: X
'    Provider: InterceptProvider, Object: 12, Format String: <null>
'    Provider: InterceptProvider, Object: 199, Format String: <null>
'    2, 12, 199
'    
'    Provider: InterceptProvider, Object: 2, Format String: R
'    Provider: InterceptProvider, Object: 12, Format String: R
'    Provider: InterceptProvider, Object: 199, Format String: R
'    II, XII, CXCIX

String.Format Q & AString.Format Q & A

Почему вы рекомендуете интерполяция между вызовами String.Format метод?Why do you recommend string interpolation over calls to the String.Format method?

Интерполяция строк предоставляет:String interpolation is:

  • Более гибким.More flexible. Данное свойство можно использовать в любой строке, не обращаясь к методу, поддерживающему составное форматирование.It can be used in any string without requiring a call to a method that supports composite formatting. В противном случае необходимо вызвать Format метода или другого метода, который поддерживает составное форматирование, такими как Console.WriteLine или StringBuilder.AppendFormat.Otherwise, you have to call the Format method or another method that supports composite formatting, such as Console.WriteLine or StringBuilder.AppendFormat.

  • Более удобном для чтения.More readable. Поскольку содержится это выражение для вставки в строку в интерполированное выражение, а не в списке аргументов, интерполированные строки являются гораздо проще для кода и для чтения.Because the expression to insert into a string appears in the interpolated expression rather than in a argument list, interpolated strings are far easier to code and to read. Из-за их улучшения удобочитаемости интерполированные строки можно заменить не только вызовы методов составного формата, но они могут также использоваться в операциях объединения строк для создания более кратким и чистый код.Because of their greater readability, interpolated strings can replace not only calls to composite format methods, but they can also be used in string concatenation operations to produce more concise, clearer code.

Сравнение в следующих двух примерах кода показано superiority интерполированные строки через объединение строк и вызовы методов составного форматирования.A comparison of the following two code examples illustrates the superiority of interpolated strings over string concatenation and calls to composite formatting methods. Использование нескольких операций объединения строк, в следующем примере создается код verbose и трудный для чтения.The use of multiple string concatenation operations in the following example produces verbose and hard-to-read code.

using System;

public class Example
{
   public static void Main()
   {
      string[] names = { "Balto", "Vanya", "Dakota", "Samuel", "Koani", "Yiska", "Yuma" };
      string output = names[0] + ", " + names[1] + ", " + names[2] + ", " + 
                      names[3] + ", " + names[4] + ", " + names[5] + ", " + 
                      names[6];  
    
      output += "\n";  
      var date = DateTime.Now;
      output += String.Format("It is {0:t} on {0:d}. The day of the week is {1}.", 
                              date, date.DayOfWeek);
      Console.WriteLine(output);                           
   }
}
// The example displays the following output:
//     Balto, Vanya, Dakota, Samuel, Koani, Yiska, Yuma
//     It is 10:29 AM on 1/8/2018. The day of the week is Monday.


Module Example
   Public Sub Main()
      Dim names = { "Balto", "Vanya", "Dakota", "Samuel", "Koani", "Yiska", "Yuma" }
      Dim output = names(0) + ", " + names(1) + ", " + names(2) + ", " + 
                   names(3) + ", " + names(4) + ", " + names(5) + ", " + 
                   names(6)  
    
      output += vbCrLf  
      Dim dat = DateTime.Now
      output += String.Format("It is {0:t} on {0:d}. The day of the week is {1}.", 
                              dat, dat.DayOfWeek)
      Console.WriteLine(output)                           
   End Sub
End Module
' The example displays the following output:
'     Balto, Vanya, Dakota, Samuel, Koani, Yiska, Yuma
'     It is 10:29 AM on 1/8/2018. The day of the week is Monday.


С другой стороны, использование интерполированные строки в следующем примере создают намного яснее и более понятного кода, чем оператор объединения строки и вызов Format метод в предыдущем примере.In contrast, the use of interpolated strings in the following example produce much clearer, more concise code than the string concatenation statement and the call to the Format method in the previous example.

using System;

public class Example
{
   public static void Main()
   {
      string[] names = { "Balto", "Vanya", "Dakota", "Samuel", "Koani", "Yiska", "Yuma" };
      string output = $"{names[0]}, {names[1]}, {names[2]}, {names[3]}, {names[4]}, " + 
                      $"{names[5]}, {names[6]}";  
    
      var date = DateTime.Now;
      output += $"\nIt is {date:t} on {date:d}. The day of the week is {date.DayOfWeek}.";
      Console.WriteLine(output);                           
   }
}
// The example displays the following output:
//     Balto, Vanya, Dakota, Samuel, Koani, Yiska, Yuma
//     It is 10:29 AM on 1/8/2018. The day of the week is Monday.


Module Example
   Public Sub Main()
      Dim names = { "Balto", "Vanya", "Dakota", "Samuel", "Koani", "Yiska", "Yuma" }
      Dim output = $"{names(0)}, {names(1)}, {names(2)}, {names(3)}, {names(4)}, " + 
                   $"{names(5)}, {names(6)}"  
    
      Dim dat = DateTime.Now
      output += $"{vbCrLf}It is {dat:t} on {dat:d}. The day of the week is {dat.DayOfWeek}." 
      Console.WriteLine(output)                           
   End Sub
End Module
' The example displays the following output:
'     Balto, Vanya, Dakota, Samuel, Koani, Yiska, Yuma
'     It is 10:29 AM on 1/8/2018. The day of the week is Monday.


Где можно найти список стандартных строк форматирования, которые могут использоваться с элементами форматирования?Where can I find a list of the predefined format strings that can be used with format items?

Как контролировать выравнивание строки результатов, которые замены элементов форматирования?How do I control the alignment of the result strings that replace format items?

Ниже приведен общий синтаксис элемента формата.The general syntax of a format item is:

{index[,alignment][: formatString]}  

где выравнивание является целое число со знаком, которое определяет ширину поля.where alignment is a signed integer that defines the field width. Если указано отрицательное значение, текст в поле по левому краю.If this value is negative, text in the field is left-aligned. Если оно положительное, текст по правому краю.If it is positive, text is right-aligned.

Как контролировать количество цифр после десятичного разделителя?How do I control the number of digits after the decimal separator?

Все строки стандартных числовых форматов , кроме «D» (который используется только целые числа), «G», «R», а «X» разрешить описатель точности, которое определяет количество цифр дробной части в результирующей строке.All standard numeric format strings except "D" (which is used with integers only), "G", "R", and "X" allow a precision specifier that defines the number of decimal digits in the result string. В следующем примере строки стандартных числовых форматов для управления количеством десятичных цифр в результирующей строке.The following example uses standard numeric format strings to control the number of decimal digits in the result string.

using System;

public class Example
{
   public static void Main()
   {
      object[] values = { 1603, 1794.68235, 15436.14 };
      string result;
      foreach (var value in values) {
         result = String.Format("{0,12:C2}   {0,12:E3}   {0,12:F4}   {0,12:N3}  {1,12:P2}\n",
                                Convert.ToDouble(value), Convert.ToDouble(value) / 10000);
         Console.WriteLine(result);
      }                           
   }
}
// The example displays output like the following:
//       $1,603.00     1.603E+003      1603.0000      1,603.000       16.03 %
//    
//       $1,794.68     1.795E+003      1794.6824      1,794.682       17.95 %
//    
//      $15,436.14     1.544E+004     15436.1400     15,436.140      154.36 %
Module Example
   Public Sub Main()
      Dim values() As Object = { 1603, 1794.68235, 15436.14 }
      Dim result As String
      For Each value In values
         result = String.Format("{0,12:C2}   {0,12:E3}   {0,12:F4}   {0,12:N3}  {1,12:P2}",
                                value, CDbl(value) / 10000)
         Console.WriteLine(result) 
         Console.WriteLine()
      Next                             
   End Sub
End Module
' The example displays the following output:
'       $1,603.00     1.603E+003      1603.0000      1,603.000       16.03 %
'    
'       $1,794.68     1.795E+003      1794.6824      1,794.682       17.95 %
'    
'      $15,436.14     1.544E+004     15436.1400     15,436.140      154.36 %

Если вы используете настраиваемого числового формата, позволяет контролировать количество цифр дробной части в результирующей строке, как показано в следующем примере описатель формата «0».If you're using a custom numeric format string, use the "0" format specifier to control the number of decimal digits in the result string, as the following example shows.

using System;

public class Example
{
   public static void Main()
   {
      decimal value = 16309.5436m;
      string result = String.Format("{0,12:#.00000} {0,12:0,000.00} {0,12:000.00#}", 
                                    value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//        16309.54360    16,309.54    16309.544
Module Example
   Public Sub Main()
      Dim value As Decimal = 16309.5436d
      Dim result As String = String.Format("{0,12:#.00000} {0,12:0,000.00} {0,12:000.00#}", 
                                           value)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'    16309.54360    16,309.54    16309.544

Как контролировать число цифр целой части?How do I control the number of integral digits?

По умолчанию операций форматирования отображать только цифры целой части значения ненулевое значение.By default, formatting operations only display non-zero integral digits. При форматировании целые числа, можно использовать описатель точности строки стандартного формата «X» и «D» для управления количеством цифр.If you are formatting integers, you can use a precision specifier with the "D" and "X" standard format strings to control the number of digits.

using System;

public class Example
{
   public static void Main()
   {
      int value = 1326;
      string result = String.Format("{0,10:D6} {0,10:X8}", value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//     001326   0000052E
Module Example
   Public Sub Main()
      Dim value As Integer = 1326
      Dim result As String = String.Format("{0,10:D6} {0,10:X8}", value)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'       001326   0000052E

Целое число или число с плавающей запятой с ведущими нулями для создания результирующую строку с указанным количеством цифр целой части с помощью «0» можно добавлять описатель настраиваемого числового формата, как показано в следующем примере.You can pad an integer or floating-point number with leading zeros to produce a result string with a specified number of integral digits by using the "0" custom numeric format specifier, as the following example shows.

using System;

public class Example
{
   public static void Main()
   {
      int value = 16342;
      string result = String.Format("{0,18:00000000} {0,18:00000000.000} {0,18:000,0000,000.0}", 
                                    value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//           00016342       00016342.000    0,000,016,342.0
Module Example
   Public Sub Main()
      Dim value As Integer = 16342
      Dim result As String = String.Format("{0,18:00000000} {0,18:00000000.000} {0,18:000,0000,000.0}", 
                                           value)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'           00016342       00016342.000    0,000,016,342.0

Количество элементов, можно включить в список формата?How many items can I include in the format list?

Нет практических ограничений.There is no practical limit. Второй параметр Format(IFormatProvider, String, Object[]) методы, помеченные с помощью ParamArrayAttribute атрибут, который позволяет включать список с разделителями или массив объектов как список формата.The second parameter of the Format(IFormatProvider, String, Object[]) method is tagged with the ParamArrayAttribute attribute, which allows you to include either a delimited list or an object array as your format list.

Как включить литерала фигурные скобки ("{» и «}») в результирующей строке?How do I include literal braces ("{" and "}") in the result string?

Например, как это не позволит следующий вызов метода возникновения FormatException исключение?For example, how do you prevent the following method call from throwing a FormatException exception?

result = String.Format("The text has {0} '{' characters and {1} '}' characters.",
                       nOpen, nClose);
result = String.Format("The text has {0} '{' characters and {1} '}' characters.",
                       nOpen, nClose)

Единый открывающей или закрывающей фигурной скобкой всегда интерпретируется как начало или конец элемента форматирования.A single opening or closing brace is always interpreted as the beginning or end of a format item. Следует интерпретировать буквально, ее следует экранировать.To be interpreted literally, it must be escaped. Экранировать фигурную скобку путем добавления другого фигурную скобку ("{{» и «}}» вместо «{» и «}»), как показано в следующем вызове метода:You escape a brace by adding another brace ("{{" and "}}" instead of "{" and "}"), as in the following method call:

string result;
int nOpen = 1;
int nClose = 2;
result = String.Format("The text has {0} '{{' characters and {1} '}}' characters.",
                       nOpen, nClose);
Console.WriteLine(result);
result = String.Format("The text has {0} '{{' characters and {1} '}}' characters.",
                       nOpen, nClose)

Однако даже скобок, легко misinterpreted.However, even escaped braces are easily misinterpreted. Мы рекомендуем включать квадратные скобки в списке формат и использовать элементы формата вставить их в результирующую строку, как показано в следующем примере.We recommend that you include braces in the format list and use format items to insert them in the result string, as the following example shows.

string result;
int nOpen = 1;
int nClose = 2;
result = String.Format("The text has {0} '{1}' characters and {2} '{3}' characters.",
                       nOpen, "{", nClose, "}");
Console.WriteLine(result);
result = String.Format("The text has {0} '{1}' characters and {2} '{3}' characters.",
                       nOpen, "{", nClose, "}")

Почему мой вызов метода String.Format исключение FormatException?Why does my call to the String.Format method throw a FormatException?

Наиболее распространенной причиной исключения является то, что индекс элемента формата не соответствует объект в списке формат.The most common cause of the exception is that the index of a format item doesn't correspond to an object in the format list. Обычно это означает, что misnumbered индексы элементов формата или забыли включить объект в списке формат.Usually this indicates that you've misnumbered the indexes of format items or you've forgotten to include an object in the format list. Попытка включить без escape-последовательности левую или правую скобку символов также создает исключение FormatException.Attempting to include an unescaped left or right brace character also throws a FormatException. В некоторых случаях исключение является результатом опечатка; Например, типичный встречается ошиблись «[» (левая скобка) вместо «{» (открывающая фигурная скобка).Occasionally, the exception is the result of a typo; for example, a typical mistake is to mistype "[" (the left bracket) instead of "{" (the left brace).

Если метод Format(System.IFormatProvider,System.String,System.Object[]) поддерживает массивы параметров, почему мой код вызова исключения, когда я использую массив?If the Format(System.IFormatProvider,System.String,System.Object[]) method supports parameter arrays, why does my code throw an exception when I use an array?

Например, в следующем коде возникает исключение FormatException исключение:For example, the following code throws a FormatException exception:

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      int[]  numbers = new int[4];
      int total = 0;
      for (int ctr = 0; ctr <= 2; ctr++) {
         int number = rnd.Next(1001);
         numbers[ctr] = number;
         total += number;
      }   
      numbers[3] = total;
      Console.WriteLine("{0} + {1} + {2} = {3}", numbers);   
   }
}
Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim numbers(3) As Integer
      Dim total As Integer = 0
      For ctr = 0 To 2
         Dim number As Integer = rnd.Next(1001)
         numbers(ctr) = number
         total += number
      Next
      numbers(3) = total
      Console.WriteLine("{0} + {1} + {2} = {3}", numbers)   
   End Sub
End Module

Это проблема разрешения перегрузки компилятор.This is a problem of compiler overload resolution. Так как компилятор не может преобразовать массив целых чисел в массив объектов, он рассматривает массив целых чисел как один аргумент, поэтому он вызывает Format(String, Object) метод.Because the compiler cannot convert an array of integers to an object array, it treats the integer array as a single argument, so it calls the Format(String, Object) method. Исключение, так как существуют четыре формата элементы, но только один элемент в списке формат.The exception is thrown because there are four format items but only a single item in the format list.

Так как Visual Basic, ни C# можно преобразовать массив целых чисел в массив объектов, необходимо самостоятельно выполнить преобразование, перед вызовом Format(String, Object[]) метод.Because neither Visual Basic nor C# can convert an integer array to an object array, you have to perform the conversion yourself before calling the Format(String, Object[]) method. Следующий пример предоставляет одну реализацию.The following example provides one implementation.

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      int[]  numbers = new int[4];
      int total = 0;
      for (int ctr = 0; ctr <= 2; ctr++) {
         int number = rnd.Next(1001);
         numbers[ctr] = number;
         total += number;
      }   
      numbers[3] = total;
      object[] values = new object[numbers.Length];
      numbers.CopyTo(values, 0);
      Console.WriteLine("{0} + {1} + {2} = {3}", values);   
   }
}
Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim numbers(3) As Integer
      Dim total As Integer = 0
      For ctr = 0 To 2
         Dim number As Integer = rnd.Next(1001)
         numbers(ctr) = number
         total += number
      Next
      numbers(3) = total
      Dim values(numbers.Length - 1) As Object
      numbers.CopyTo(values, 0) 
      Console.WriteLine("{0} + {1} + {2} = {3}", values)   
   End Sub
End Module

Format(String, Object) Format(String, Object) Format(String, Object) Format(String, Object)

Заменяет один или более элементов формата в строке строковым представлением указанного объекта.Replaces one or more format items in a string with the string representation of a specified object.

public:
 static System::String ^ Format(System::String ^ format, System::Object ^ arg0);
public static string Format (string format, object arg0);
static member Format : string * obj -> string
Public Shared Function Format (format As String, arg0 As Object) As String

Параметры

arg0
Object Object Object Object

Объект для форматирования.The object to format.

Возвраты

Копия format, в которой все элементы формата заменены строковыми представлениями arg0.A copy of format in which any format items are replaced by the string representation of arg0.

Исключения

Недопустимый элемент формата в format.The format item in format is invalid.

-или--or- Индекс элемента формата не равен нулю.The index of a format item is not zero.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования преобразовать значение выражения в строковое представление и встроить это представление в строку.This method uses the composite formatting feature to convert the value of an expression to its string representation and to embed that representation in a string.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать метод с составной строкой формата, которая включает один или несколько элементов формата.Instead, you can call the method with a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Пример Форматирование один аргументExample: Formatting a single argument

В следующем примере используется Format(String, Object) метод для внедрения возраст человека в середине строки.The following example uses the Format(String, Object) method to embed an individual's age in the middle of a string.

using namespace System;

void main()
{
   DateTime birthdate = DateTime(1993, 7, 28);
   array<DateTime>^ dates = gcnew array<DateTime> { DateTime(1993, 8, 16), 
                                                    DateTime(1994, 7, 28), 
                                                    DateTime(2000, 10, 16), 
                                                    DateTime(2003, 7, 27), 
                                                    DateTime(2007, 5, 27) };

   for each (DateTime dateValue in dates)
   {
      TimeSpan interval = dateValue - birthdate;
      // Get the approximate number of years, without accounting for leap years.
      int years = ((int)interval.TotalDays) / 365;
      // See if adding the number of years exceeds dateValue.
      String^ output;
      if (birthdate.AddYears(years) <= dateValue) {
         output = String::Format("You are now {0} years old.", years);
         Console::WriteLine(output);
      }   
      else {
         output = String::Format("You are now {0} years old.", years - 1);
         Console::WriteLine(output);
      }      
   }
}
// The example displays the following output:
//       You are now 0 years old.
//       You are now 1 years old.
//       You are now 7 years old.
//       You are now 9 years old.
//       You are now 13 years old.
using System;

public class Example
{
   public static void Main()
   {
      DateTime birthdate = new DateTime(1993, 7, 28);
      DateTime[] dates = { new DateTime(1993, 8, 16), 
                           new DateTime(1994, 7, 28), 
                           new DateTime(2000, 10, 16), 
                           new DateTime(2003, 7, 27), 
                           new DateTime(2007, 5, 27) };

      foreach (DateTime dateValue in dates)
      {
         TimeSpan interval = dateValue - birthdate;
         // Get the approximate number of years, without accounting for leap years.
         int years = ((int) interval.TotalDays) / 365;
         // See if adding the number of years exceeds dateValue.
         string output;
         if (birthdate.AddYears(years) <= dateValue) {
            output = String.Format("You are now {0} years old.", years);
            Console.WriteLine(output);
         }   
         else {
            output = String.Format("You are now {0} years old.", years - 1);
            Console.WriteLine(output);
         }      
      }
   }
}
// The example displays the following output:
//       You are now 0 years old.
//       You are now 1 years old.
//       You are now 7 years old.
//       You are now 9 years old.
//       You are now 13 years old.
Module Example
   Public Sub Main()
      Dim birthdate As Date = #7/28/1993#
      Dim dates() As Date = { #9/16/1993#, #7/28/1994#, #10/16/2000#, _
                              #7/27/2003#, #5/27/2007# }
      For Each dateValue As Date In dates
         Dim interval As TimeSpan = dateValue - birthdate
         ' Get the approximate number of years, without accounting for leap years.
         Dim years As Integer = CInt(interval.TotalDays) \ 365
         ' See if adding the number of years exceeds dateValue.
         Dim output As String
         If birthdate.AddYears(years) <= dateValue Then
            output = String.Format("You are now {0} years old.", years)
            Console.WriteLine(output)
         Else
            output = String.Format("You are now {0} years old.", years - 1)
            Console.WriteLine(output)   
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       You are now 0 years old.
'       You are now 1 years old.
'       You are now 7 years old.
'       You are now 9 years old.
'       You are now 13 years old.
Дополнительно

Format(String, Object[]) Format(String, Object[]) Format(String, Object[]) Format(String, Object[])

Заменяет элемент формата в указанной строке строковым представлением соответствующего объекта в указанном массиве.Replaces the format item in a specified string with the string representation of a corresponding object in a specified array.

public:
 static System::String ^ Format(System::String ^ format, ... cli::array <System::Object ^> ^ args);
public static string Format (string format, params object[] args);
static member Format : string * obj[] -> string
Public Shared Function Format (format As String, ParamArray args As Object()) As String

Параметры

args
Object[]

Массив объектов, содержащий нуль или более форматируемых объектов.An object array that contains zero or more objects to format.

Возвраты

Копия format, в которой элементы формата заменены строковыми представления соответствующих объектов в args.A copy of format in which the format items have been replaced by the string representation of the corresponding objects in args.

Исключения

Значение параметра format или argsnull.format or args is null.

format недопустим.format is invalid.

-или--or- Индекс элемента формата меньше нуля или больше либо равен длине массива args.The index of a format item is less than zero, or greater than or equal to the length of the args array.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования значения четырех или более выражений в их строковые представления и для внедрения этих представлений в строку.This method uses the composite formatting feature to convert the value of four or more expressions to their string representations and to embed those representations in a string. Так как args параметр помечается System.ParamArrayAttribute атрибут, можно передать объекты в метод как отдельные аргументы или Object массива.Since the args parameter is marked with the System.ParamArrayAttribute attribute, you can pass the objects to the method as individual arguments or as an Object array.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать метод с составной строкой формата, которая включает один или несколько элементов формата.Instead, you can call the method with a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Пример Форматирование больше трех аргументовExample: Formatting more than three arguments

В этом примере создается строка, содержащая данные на высокой и низкой температуре в определенный день.This example creates a string that contains data on the high and low temperature on a particular date. Строка составного формата имеет пять элементов формата в примере C# и шесть в примере Visual Basic.The composite format string has five format items in the C# example and six in the Visual Basic example. Два элемента форматирования определяют ширину соответствующего значения строковое представление, а первый элемент форматирования также включают стандартные формата даты и времени.Two of the format items define the width of their corresponding value's string representation, and the first format item also includes a standard date and time format string.

using namespace System;

void main()
{
   DateTime date1 = DateTime(2009, 7, 1);
   TimeSpan hiTime = TimeSpan(14, 17, 32);
   Decimal hiTemp = (Decimal) 62.1; 
   TimeSpan loTime = TimeSpan(3, 16, 10);
   Decimal loTemp = (Decimal)54.8; 

   String^ result1 = String::Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                    date1, hiTime, hiTemp, loTime, loTemp);
   Console::WriteLine(result1);
   Console::WriteLine();
           
   String^ result2 = String::Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                    gcnew array<Object^> { date1, hiTime, hiTemp, loTime, loTemp });
   Console::WriteLine(result2);
}
// The example displays the following output:
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 7, 1);
      TimeSpan hiTime = new TimeSpan(14, 17, 32);
      decimal hiTemp = 62.1m; 
      TimeSpan loTime = new TimeSpan(3, 16, 10);
      decimal loTemp = 54.8m; 

      string result1 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     date1, hiTime, hiTemp, loTime, loTemp);
      Console.WriteLine(result1);
      Console.WriteLine();
           
      string result2 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     new object[] { date1, hiTime, hiTemp, loTime, loTemp });
      Console.WriteLine(result2);
   }
}
// The example displays output like the following:
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
Module Example
   Public Sub Main()
      Dim date1 As Date = #7/1/2009#
      Dim hiTime As New TimeSpan(14, 17, 32)
      Dim hiTemp As Decimal = 62.1d 
      Dim loTime As New TimeSpan(3, 16, 10)
      Dim loTemp As Decimal = 54.8d 

      Dim result1 As String = String.Format("Temperature on {0:d}:{5}{1,11}: {2} degrees (hi){5}{3,11}: {4} degrees (lo)", _
                                           date1, hiTime, hiTemp, loTime, loTemp, vbCrLf)
      Console.WriteLine(result1)
      Console.WriteLine()
           
      Dim result2 As String = String.Format("Temperature on {0:d}:{5}{1,11}: {2} degrees (hi){5}{3,11}: {4} degrees (lo)", _
                                            New Object() { date1, hiTime, hiTemp, loTime, loTemp, vbCrLf })
      Console.WriteLine(result2)                                            
   End Sub
End Module
' The example displays the following output:
'       Temperature on 7/1/2009:
'          14:17:32: 62.1 degrees (hi)
'          03:16:10: 54.8 degrees (lo)
'
'       Temperature on 7/1/2009:
'          14:17:32: 62.1 degrees (hi)
'          03:16:10: 54.8 degrees (lo)

Можно также передать объекты отформатирован в виде массива, а не как список аргументов.You can also pass the objects to be formatted as an array rather than as an argument list.

using namespace System;

ref class CityInfo
{
public:
   CityInfo(String^ name, int population, Decimal area, int year)
   {
      this->Name = name;
      this->Population = population;
      this->Area = area;
      this->Year = year;
   }
   
   String^ Name; 
   int Population;
   Decimal Area;
   int Year;
};

ref class Example
{
public:
   static void ShowPopulationData(CityInfo^ city)
   {
      array<Object^>^ args = gcnew array<Object^> { city->Name, city->Year, city->Population, city->Area };
      String^ result = String::Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", 
                                    args);
      Console::WriteLine(result); 
   }
};

void main()
{
   CityInfo^ nyc2010 = gcnew CityInfo("New York", 8175133, (Decimal) 302.64, 2010);
   Example::ShowPopulationData(nyc2010);
   CityInfo^ sea2010 = gcnew CityInfo("Seattle", 608660, (Decimal) 83.94, 2010);      
   Example::ShowPopulationData(sea2010); 
}
// The example displays the following output:
//       New York in 2010: Population 8,175,133, Area 302.6 sq. feet
//       Seattle in 2010: Population 608,660, Area 83.9 sq. feet
using System;

public class CityInfo
{
   public CityInfo(String name, int population, Decimal area, int year)
   {
      this.Name = name;
      this.Population = population;
      this.Area = area;
      this.Year = year;
   }
   
   public readonly String Name; 
   public readonly int Population;
   public readonly Decimal Area;
   public readonly int Year;
}

public class Example
{
   public static void Main()
   {
      CityInfo nyc2010 = new CityInfo("New York", 8175133, 302.64m, 2010);
      ShowPopulationData(nyc2010);
      CityInfo sea2010 = new CityInfo("Seattle", 608660, 83.94m, 2010);      
      ShowPopulationData(sea2010); 
   }

   private static void ShowPopulationData(CityInfo city)
   {
      object[] args = { city.Name, city.Year, city.Population, city.Area };
      String result = String.Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", 
                                    args);
      Console.WriteLine(result); 
   }
}
// The example displays the following output:
//       New York in 2010: Population 8,175,133, Area 302.6 sq. feet
//       Seattle in 2010: Population 608,660, Area 83.9 sq. feet
Public Class CityInfo
   Public Sub New(name As String, population As Integer, area As Decimal, year As Integer)
      Me.Name = name
      Me.Population = population
      Me.Area = area
      Me.Year = year
   End Sub
   
   Public ReadOnly Name As String
   Public ReadOnly Population As Integer
   Public ReadOnly Area As Decimal
   Public ReadOnly Year As Integer
End Class

Module Example
   Public Sub Main()
      Dim nyc2010 As New CityInfo("New York", 8175133, 302.64d, 2010)
      ShowPopulationData(nyc2010)
      Dim sea2010 As New CityInfo("Seattle", 608660, 83.94d, 2010)      
      ShowPopulationData(sea2010) 
   End Sub
   
   Private Sub ShowPopulationData(city As CityInfo)
      Dim args() As Object = { city.Name, city.Year, city.Population, city.Area }
      Dim result = String.Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", args)
      Console.WriteLine(result) 
   End Sub
End Module
' The example displays the following output:
'       New York in 2010: Population 8,175,133, Area 302.6 sq. feet
'       Seattle in 2010: Population 608,660, Area 83.9 sq. feet   
Дополнительно

Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object) Format(IFormatProvider, String, Object)

Заменяет элементы формата в указанной строке строковым представлением соответствующего объекта.Replaces the format item or items in a specified string with the string representation of the corresponding object. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

public:
 static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, System::Object ^ arg0);
public static string Format (IFormatProvider provider, string format, object arg0);
static member Format : IFormatProvider * string * obj -> string
Public Shared Function Format (provider As IFormatProvider, format As String, arg0 As Object) As String

Параметры

provider
IFormatProvider IFormatProvider IFormatProvider IFormatProvider

Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.An object that supplies culture-specific formatting information.

arg0
Object Object Object Object

Объект для форматирования.The object to format.

Возвраты

Копия format, в которой элементы форматирования были заменены строковым представлением arg0.A copy of format in which the format item or items have been replaced by the string representation of arg0.

Исключения

format недопустим.format is invalid.

-или--or- Индекс элемента формата не равен нулю.The index of a format item is not zero.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования преобразовать значение выражения в строковое представление и встроить это представление в строку.This method uses the composite formatting feature to convert the value of an expression to its string representation and to embed that representation in a string. При выполнении преобразования, данный метод использует форматирование, зависящее от языка и региональных параметров или пользовательский модуль форматирования.In performing the conversion, the method uses culture-sensitive formatting or a custom formatter. Метод преобразует arg0 в строковое представление, вызвав его ToString(IFormatProvider) метода или, если объект, соответствующая элемент форматирования, включающий строку формата, вызвав его ToString () String, IFormatProvider) метод.The method converts arg0 to its string representation by calling its ToString(IFormatProvider) method or, if the object's corresponding format item includes a format string, by calling its ToString(String,IFormatProvider) method. Если эти методы не существует, он вызывает метод объекта без параметров ToString метод.If these methods don't exist, it calls the object's parameterless ToString method.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать этот метод с использованием объекта, который предоставляет зависящее от языка и региональных параметров или настраиваемое форматирование, а также составной строки формата, которая включает один или несколько элементов формата.Instead, you can call the method with an object that provides culture-sensitive or custom formatting and a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[]) Format(IFormatProvider, String, Object[])

Заменяет элементы формата в строке строковым представлениями соответствующих объектов в указанном массиве.Replaces the format items in a string with the string representations of corresponding objects in a specified array. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

public:
 static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, ... cli::array <System::Object ^> ^ args);
public static string Format (IFormatProvider provider, string format, params object[] args);
static member Format : IFormatProvider * string * obj[] -> string
Public Shared Function Format (provider As IFormatProvider, format As String, ParamArray args As Object()) As String

Параметры

provider
IFormatProvider IFormatProvider IFormatProvider IFormatProvider

Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.An object that supplies culture-specific formatting information.

args
Object[]

Массив объектов, содержащий нуль или более форматируемых объектов.An object array that contains zero or more objects to format.

Возвраты

Копия format, в которой элементы формата заменены строковыми представления соответствующих объектов в args.A copy of format in which the format items have been replaced by the string representation of the corresponding objects in args.

Исключения

Значение параметра format или argsnull.format or args is null.

format недопустим.format is invalid.

-или--or- Индекс элемента формата меньше нуля или больше либо равен длине массива args.The index of a format item is less than zero, or greater than or equal to the length of the args array.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования четырех или более выражений в их строковые представления и для внедрения этих представлений в строку.This method uses the composite formatting feature to convert four or more expressions to their string representations and to embed those representations in a string. При выполнении преобразования, данный метод использует форматирование, зависящее от языка и региональных параметров или пользовательский модуль форматирования.In performing the conversion, the method uses culture-sensitive formatting or a custom formatter. Метод преобразует каждый Object аргумент в строковое представление, вызвав его ToString(IFormatProvider) метода или, если объект, соответствующая элемент форматирования, включающий строку формата, вызвав его ToString(String,IFormatProvider) метод.The method converts each Object argument to its string representation by calling its ToString(IFormatProvider) method or, if the object's corresponding format item includes a format string, by calling its ToString(String,IFormatProvider) method. Если эти методы не существует, он вызывает метод объекта без параметров ToString метод.If these methods don't exist, it calls the object's parameterless ToString method.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать этот метод с использованием объекта, который предоставляет зависящее от языка и региональных параметров или настраиваемое форматирование, а также составной строки формата, которая включает один или несколько элементов формата.Instead, you can call the method with an object that provides culture-sensitive or custom formatting and a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Пример Форматирование с учетом языка и региональных параметровExample: Culture-sensitive formatting

В этом примере используется Format(IFormatProvider, String, Object[]) метод для отображения строкового представления некоторых значений даты и времени и числовых значений с помощью нескольких различных языков и региональных параметров.This example uses the Format(IFormatProvider, String, Object[]) method to display the string representation of some date and time values and numeric values by using several different cultures.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };
      
      DateTime dateToDisplay = new DateTime(2009, 9, 1, 18, 32, 0);
      double value = 9164.32;

      Console.WriteLine("Culture     Date                                Value\n");
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);
         string output = String.Format(culture, "{0,-11} {1,-35:D} {2:N}", 
                                       culture.Name, dateToDisplay, value);
         Console.WriteLine(output);
      }    
   }
}
// The example displays the following output:
//    Culture     Date                                Value
//    
//    en-US       Tuesday, September 01, 2009         9,164.32
//    fr-FR       mardi 1 septembre 2009              9 164,32
//    de-DE       Dienstag, 1. September 2009         9.164,32
//    es-ES       martes, 01 de septiembre de 2009    9.164,32
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "de-DE", "es-ES" }
      
      Dim dateToDisplay As Date = #9/1/2009 6:32PM#
      Dim value As Double = 9164.32

      Console.WriteLine("Culture     Date                                Value")
      Console.WriteLine()      
      For Each cultureName As String In cultureNames
         Dim culture As New CultureInfo(cultureName)
         Dim output As String = String.Format(culture, "{0,-11} {1,-35:D} {2:N}", _
                                              culture.Name, dateToDisplay, value)
         Console.WriteLine(output)
      Next    
   End Sub
End Module
' The example displays the following output:
'       Culture     Date                                Value
'       
'       en-US       Tuesday, September 01, 2009         9,164.32
'       fr-FR       mardi 1 septembre 2009              9 164,32
'       de-DE       Dienstag, 1. September 2009         9.164,32
'       es-ES       martes, 01 de septiembre de 2009    9.164,32
Дополнительно

Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object) Format(String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects.

public:
 static System::String ^ Format(System::String ^ format, System::Object ^ arg0, System::Object ^ arg1);
public static string Format (string format, object arg0, object arg1);
static member Format : string * obj * obj -> string
Public Shared Function Format (format As String, arg0 As Object, arg1 As Object) As String

Параметры

arg0
Object Object Object Object

Первый объект для форматирования.The first object to format.

arg1
Object Object Object Object

Второй объект для форматирования.The second object to format.

Возвраты

Копия format, в которой все элементы формата заменены строковыми представлениями arg0 и arg1.A copy of format in which format items are replaced by the string representations of arg0 and arg1.

Исключения

format недопустим.format is invalid.

-или--or- Индекс элемента формата не равен нулю или единице.The index of a format item is not zero or one.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования значения из двух выражений в их строковые представления и для внедрения этих представлений в строку.This method uses the composite formatting feature to convert the value of two expressions to their string representations and to embed those representations in a string.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать метод с составной строкой формата, которая включает один или несколько элементов формата.Instead, you can call the method with a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Пример Форматирование два аргументаExample: Formatting two arguments

В этом примере используется Format(String, Object, Object) метод для отображения данных температуры и времени, хранящиеся в универсальной Dictionary<TKey,TValue> объекта.This example uses the Format(String, Object, Object) method to display time and temperature data stored in a generic Dictionary<TKey,TValue> object. Обратите внимание на то, что строка формата имеет три элемента форматирования, несмотря на то, что имеется только два объекта для форматирования.Note that the format string has three format items, although there are only two objects to format. Это, так как первый объект в списке (значение даты и времени) используются элементы два формата: Первый формат элемента отображает время, а вторая отображает дату.This is because the first object in the list (a date and time value) is used by two format items: The first format item displays the time, and the second displays the date.

using namespace System;
using namespace System::Collections::Generic;

void main()
{
   Dictionary<DateTime, Double>^ temperatureInfo = gcnew Dictionary<DateTime, Double>(); 
   temperatureInfo->Add(DateTime(2010, 6, 1, 14, 0, 0), 87.46);
   temperatureInfo->Add(DateTime(2010, 12, 1, 10, 0, 0), 36.81);
      
   Console::WriteLine("Temperature Information:\n");
   String^ output;   
   for each (KeyValuePair<DateTime, Double>^ item in temperatureInfo)
   {
      output = String::Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}�F", 
                              item->Key, item->Value);
      Console::WriteLine(output);
   }
}
// The example displays the following output:
//       Temperature Information:
//       
//       Temperature at  2:00 PM on  6/1/2010:  87.5�F
//       Temperature at 10:00 AM on 12/1/2010:  36.8�F
using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Dictionary<DateTime, Double> temperatureInfo = new Dictionary<DateTime, Double>(); 
      temperatureInfo.Add(new DateTime(2010, 6, 1, 14, 0, 0), 87.46);
      temperatureInfo.Add(new DateTime(2010, 12, 1, 10, 0, 0), 36.81);
      
      Console.WriteLine("Temperature Information:\n");
      string output;   
      foreach (var item in temperatureInfo)
      {
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", 
                                item.Key, item.Value);
         Console.WriteLine(output);
      }
   }
}
// The example displays output like the following:
//       Temperature Information:
//       
//       Temperature at  2:00 PM on  6/1/2010:  87.5°F
//       Temperature at 10:00 AM on 12/1/2010:  36.8°F
Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim temperatureInfo As New Dictionary(Of Date, Double) 
      temperatureInfo.Add(#6/1/2010 2:00PM#, 87.46)
      temperatureInfo.Add(#12/1/2010 10:00AM#, 36.81)
      
      Console.WriteLine("Temperature Information:")
      Console.WriteLine()
      Dim output As String   
      For Each item In temperatureInfo
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", _
                                item.Key, item.Value)
         Console.WriteLine(output)
      Next
   End Sub
End Module
' The example displays the following output:
'       Temperature Information:
'       
'       Temperature at  2:00 PM on  6/1/2010:  87.5°F
'       Temperature at 10:00 AM on 12/1/2010:  36.8°F
Дополнительно

Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object) Format(IFormatProvider, String, Object, Object)

Заменяет элементы формата в строке строковым представлением двух указанных объектов.Replaces the format items in a string with the string representation of two specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.A parameter supplies culture-specific formatting information.

public:
 static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, System::Object ^ arg0, System::Object ^ arg1);
public static string Format (IFormatProvider provider, string format, object arg0, object arg1);
static member Format : IFormatProvider * string * obj * obj -> string
Public Shared Function Format (provider As IFormatProvider, format As String, arg0 As Object, arg1 As Object) As String

Параметры

provider
IFormatProvider IFormatProvider IFormatProvider IFormatProvider

Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.An object that supplies culture-specific formatting information.

arg0
Object Object Object Object

Первый объект для форматирования.The first object to format.

arg1
Object Object Object Object

Второй объект для форматирования.The second object to format.

Возвраты

Копия format, в которой все элементы формата заменены строковыми представлениями arg0 и arg1.A copy of format in which format items are replaced by the string representations of arg0 and arg1.

Исключения

format недопустим.format is invalid.

-или--or- Индекс элемента формата не равен нулю или единице.The index of a format item is not zero or one.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования в их строковые представления двух выражений и внедрить эти представления в строку.This method uses the composite formatting feature to convert two expressions to their string representations and to embed those representations in a string. При выполнении преобразования, данный метод использует форматирование, зависящее от языка и региональных параметров или пользовательский модуль форматирования.In performing the conversion, the method uses culture-sensitive formatting or a custom formatter. Метод преобразует каждый Object аргумент в строковое представление, вызвав его ToString(IFormatProvider) метода или, если объект, соответствующая элемент форматирования, включающий строку формата, вызвав его ToString(String,IFormatProvider) метод.The method converts each Object argument to its string representation by calling its ToString(IFormatProvider) method or, if the object's corresponding format item includes a format string, by calling its ToString(String,IFormatProvider) method. Если эти методы не существует, он вызывает метод объекта без параметров ToString метод.If these methods don't exist, it calls the object's parameterless ToString method.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать этот метод с использованием объекта, который предоставляет зависящее от языка и региональных параметров или настраиваемое форматирование, а также составной строки формата, которая включает один или несколько элементов формата.Instead, you can call the method with an object that provides culture-sensitive or custom formatting and a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object) Format(String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects.

public:
 static System::String ^ Format(System::String ^ format, System::Object ^ arg0, System::Object ^ arg1, System::Object ^ arg2);
public static string Format (string format, object arg0, object arg1, object arg2);
static member Format : string * obj * obj * obj -> string
Public Shared Function Format (format As String, arg0 As Object, arg1 As Object, arg2 As Object) As String

Параметры

arg0
Object Object Object Object

Первый объект для форматирования.The first object to format.

arg1
Object Object Object Object

Второй объект для форматирования.The second object to format.

arg2
Object Object Object Object

Третий объект для форматирования.The third object to format.

Возвраты

Копия format, в которой все элементы формата заменены строковыми представлениями arg0, arg1 и arg2.A copy of format in which the format items have been replaced by the string representations of arg0, arg1, and arg2.

Исключения

format недопустим.format is invalid.

-или--or- Индекс элемента формата меньше нуля или больше двух.The index of a format item is less than zero, or greater than two.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования значения из трех выражений в их строковые представления и для внедрения этих представлений в строку.This method uses the composite formatting feature to convert the value of three expressions to their string representations and to embed those representations in a string.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать метод с составной строкой формата, которая включает один или несколько элементов формата.Instead, you can call the method with a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Пример Форматирование три аргументаExample: Formatting three arguments

В этом примере используется Format(String, Object, Object, Object) метод, чтобы создать строку, которая иллюстрирует результат логического значения And операцию с двумя целочисленными значениями.This example uses the Format(String, Object, Object, Object) method to create a string that illustrates the result of a Boolean And operation with two integer values. Обратите внимание, строка формата содержит шесть элементов форматирования, что метод имеет только три элемента в списке параметров, поскольку каждый элемент форматируется двумя разными способами.Note that the format string includes six format items, but the method has only three items in its parameter list, because each item is formatted in two different ways.

using namespace System;

void main()
{
   String^ formatString = "    {0,10} ({0,8:X8})\n" + 
                           "And {1,10} ({1,8:X8})\n" + 
                           "  = {2,10} ({2,8:X8})";
   int value1 = 16932;
   int value2 = 15421;
   String^ result = String::Format(formatString, 
                                   value1, value2, value1 & value2);
   Console::WriteLine(result);
}
// The example displays the following output:
//                16932 (00004224)
//       And      15421 (00003C3D)
//         =         36 (00000024)
using System;

public class Example
{
   public static void Main()
   {
      string formatString = "    {0,10} ({0,8:X8})\n" + 
                            "And {1,10} ({1,8:X8})\n" + 
                            "  = {2,10} ({2,8:X8})";
      int value1 = 16932;
      int value2 = 15421;
      string result = String.Format(formatString, 
                                    value1, value2, value1 & value2);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//                16932 (00004224)
//       And      15421 (00003C3D)
//         =         36 (00000024)
Public Module Example
   Public Sub Main()
      Dim formatString As String = "    {0,10} ({0,8:X8})" + vbCrLf +  _
                                   "And {1,10} ({1,8:X8})" + vbCrLf + _
                                   "  = {2,10} ({2,8:X8})"
      Dim value1 As Integer = 16932
      Dim value2 As Integer = 15421
      Dim result As String = String.Format(formatString, _
                                           value1, value2, value1 And value2)
      Console.WriteLine(result)                          
   End Sub
End Module
' The example displays the following output:
'                16932 (00004224)
'       And      15421 (00003C3D)
'         =         36 (00000024)
Дополнительно

Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object) Format(IFormatProvider, String, Object, Object, Object)

Заменяет элементы формата в строке строковым представлением трех указанных объектов.Replaces the format items in a string with the string representation of three specified objects. Параметр предоставляет сведения об особенностях форматирования, связанных с языком и региональными параметрами.An parameter supplies culture-specific formatting information.

public:
 static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, System::Object ^ arg0, System::Object ^ arg1, System::Object ^ arg2);
public static string Format (IFormatProvider provider, string format, object arg0, object arg1, object arg2);
static member Format : IFormatProvider * string * obj * obj * obj -> string
Public Shared Function Format (provider As IFormatProvider, format As String, arg0 As Object, arg1 As Object, arg2 As Object) As String

Параметры

provider
IFormatProvider IFormatProvider IFormatProvider IFormatProvider

Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.An object that supplies culture-specific formatting information.

arg0
Object Object Object Object

Первый объект для форматирования.The first object to format.

arg1
Object Object Object Object

Второй объект для форматирования.The second object to format.

arg2
Object Object Object Object

Третий объект для форматирования.The third object to format.

Возвраты

Копия format, в которой все элементы формата заменены строковыми представлениями arg0, arg1 и arg2.A copy of format in which the format items have been replaced by the string representations of arg0, arg1, and arg2.

Исключения

format недопустим.format is invalid.

-или--or- Индекс элемента формата меньше нуля или больше двух.The index of a format item is less than zero, or greater than two.

Комментарии

Важно!

Вместо вызова метода String.Format или использования строк составного формата можно использовать интерполированные строки, если ваш язык их поддерживает.Instead of calling the String.Format method or using composite format strings, you can use interpolated strings if your language supports them. Интерполированная строка — это строка, которая содержит интерполированные выражения.An interpolated string is a string that contains interpolated expressions. Каждое интерполированное выражение завершается значением выражения и включается в строку результатов, если строка назначена.Each interpolated expression is resolved with the expression's value and included in the result string when the string is assigned. Дополнительные сведения см. в разделе Интерполяция строк (справочник по C#) и Интерполированные строки (справочник по Visual Basic).For more information, see String interpolation (C# Reference) and Interpolated Strings (Visual Basic Reference).

Этот метод использует составного форматирования для преобразования три выражения строковыми представлениями и внедрять эти представления в строку.This method uses the composite formatting feature to convert three expressions to their string representations and to embed those representations in a string. При выполнении преобразования, данный метод использует форматирование, зависящее от языка и региональных параметров или пользовательский модуль форматирования.In performing the conversion, the method uses culture-sensitive formatting or a custom formatter. Метод преобразует каждый Object аргумент в строковое представление, вызвав его ToString(IFormatProvider) метода или, если объект, соответствующая элемент форматирования, включающий строку формата, вызвав его ToString(String,IFormatProvider) метод.The method converts each Object argument to its string representation by calling its ToString(IFormatProvider) method or, if the object's corresponding format item includes a format string, by calling its ToString(String,IFormatProvider) method. Если эти методы не существует, он вызывает метод объекта без параметров ToString метод.If these methods don't exist, it calls the object's parameterless ToString method.

Тем не менее при вызове метода String.Format необязательно учитывать конкретную перегрузку, которую требуется вызвать.However, when calling the String.Format method, it is not necessary to focus on the particular overload that you want to call. Вместо этого можно вызвать этот метод с использованием объекта, который предоставляет зависящее от языка и региональных параметров или настраиваемое форматирование, а также составной строки формата, которая включает один или несколько элементов формата.Instead, you can call the method with an object that provides culture-sensitive or custom formatting and a composite format string that includes one or more format items. Каждому элементу формата назначается числовой индекс, начиная с 0.You assign each format item a numeric index; the first index starts at 0. Помимо исходной строки вызов метода должен содержать дополнительные аргументы, число которых соответствует количеству значений индекса.In addition to the initial string, your method call should have as many additional arguments as it has index values. Например, строка, элементы формата которой имеют индексы 0 и 1, должна иметь 2 аргумента. Для строки с индексами от 0 до 5 потребуется 6 аргументов.For example, a string whose format items have indexes of 0 and 1 should have 2 arguments; one with indexes 0 through 5 should have 6 arguments. После этого компилятор языка будет разрешать вызов метода в конкретную перегрузку метода String.Format.Your language compiler will then resolve your method call to a particular overload of the String.Format method.

Дополнительные сведения об использовании метода String.Format см. в статьях Начало работы с методом String.Format и Выбор вызываемого метода.For more detailed documentation on using the String.Format method, see Getting started with the String.Format method and Which method do I call?.

Применяется к