String.Format 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
根據指定的格式,將物件的值轉換成字串,並將其插入另一個字元串中。
如果你是新 String.Format 手,可以參考「 開始使用字串.格式」 來快速了解。
多載
範例
許多呼叫 Format 方法的範例在這篇文章中穿插出現。 您也可以下載一組完整的 String.Format 範例,其中包含適用於 C# 的.NET Core 專案。
以下是文章中包含的一些範例:
建立格式字串
控制格式化的輸出
控件格式設定
控件間距
控件對齊方式
控制整數位數
控制小數分隔符之後的數字數目
在結果字串中包含字面上的大括號
讓格式字串具備文化敏感性
自訂格式設定
開始使用 String.Format 方法
如果您需要將物件、變數或表達式的值插入另一個字串,請使用 String.Format。 例如,您可以將 Decimal 值的值插入字串中,以將它顯示為單一字串:
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.
let pricePerOunce = 17.36m
String.Format("The current price is {0} per ounce.", pricePerOunce)
|> printfn "%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.
而且您可以控制該值的格式設定:
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.
let pricePerOunce = 17.36m
String.Format("The current price is {0:C2} per ounce.", pricePerOunce)
|> printfn "%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.
除了格式化之外,您也可以控制對齊和間距。
插入字串
String.Format 開頭為格式字串,後面接著一或多個物件或表達式,這些物件或表達式將會轉換成字串,並在格式字串中指定的位置插入。 例如:
decimal temp = 20.4m;
string s = String.Format("The temperature is {0}°C.", temp);
Console.WriteLine(s);
// Displays 'The temperature is 20.4°C.'
let temp = 20.4m
String.Format("The temperature is {0}°C.", temp)
|> printfn "%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} 是一個格式項目。
0 是物件索引,其字串值將插入該位置。 (索引從0開始。如果要插入的物件不是字串,則會呼叫其 ToString 方法,將它轉換成一個,然後再將它插入結果字串中。
以下是另一個範例,該範例使用兩個格式項目和物件清單中的兩個物件:
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.'
String.Format("At {0}, the temperature is {1}°C.", DateTime.Now, 20.4)
|> printfn "%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.'
只要每個格式專案的索引在物件清單中都有相符的物件,您就可以在物件清單中擁有無限多個格式專案和物件。 您也不必擔心呼叫哪個多載函式;編譯器會為您選擇適當的版本。
控件格式設定
您可以使用格式字串追蹤格式專案中的索引,以控制物件的格式化方式。 例如,{0:d} 會將 「d」 格式字串套用至物件清單中的第一個物件。 以下是單一物品和兩個格式項目的範例:
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'
String.Format("It is now {0:d} at {0:t}", DateTime.Now)
|> printfn "%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。 您也可以將格式字串的支援新增至您自己的類型。
控制間距
您可以使用 的語法,定義插入結果字串的字串寬度,例如 {0,12},其會插入 12 個字元的字串。 在此情況下,第一個物件的字串表示會在 12 個字元的欄位中靠右對齊。 (如果第一個物件的字串表示長度超過 12 個字元,則會忽略慣用的欄位寬度,並將整個字串插入結果字串中。
下列範例會定義 6 個字元的欄位來保存字串 「Year」 和某些年份字串,以及用來保存字串 「Population」 和某些母體數據的 15 個字元字段。 請注意,字元在欄位內是右對齊的。
int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
var sb = new System.Text.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
open System
open System.Text
let years = [| 2013; 2014; 2015 |]
let population = [| 1025632; 1105967; 1148203 |]
let sb = StringBuilder()
sb.Append(String.Format("{0,6} {1,15}\n\n", "Year", "Population")) |> ignore
for i = 0 to years.Length - 1 do
sb.Append(String.Format("{0,6} {1,15:N0}\n", years[i], population[i])) |> ignore
printfn $"{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
控件對齊方式
如果您指定欄位寬度,字串預設會靠右對齊其欄位。 若要在欄位中靠左對齊字串,您會在欄位寬度前面加上負號,例如 {0,-12} 來定義 12 個字元的靠左對齊字段。
下列範例與上一個範例類似,不同之處在於它靠左對齊標籤和數據。
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
let years = [| 2013; 2014; 2015 |]
let population = [| 1025632; 1105967; 1148203 |]
let mutable s = String.Format("{0,-10} {1,-10}\n\n", "Year", "Population")
for i = 0 to years.Length - 1 do
s <- s + String.Format("{0,-10} {1,-10:N0}\n", years[i], population[i])
printfn $"\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 會使用複合格式設定功能。 如需詳細資訊,請參閱複合格式設定。
我應該使用哪一種方法?
| Objective | 呼叫方法 |
|---|---|
| 使用目前文化特性的慣例來格式化一或多個物件。 | 除了包含 provider 參數的多載之外,其餘 Format 多載會包含 String 參數,後面接著一或多個物件參數。 因此,您不需要判斷您打算呼叫哪個 Format 多載。 您的語言編譯程式會根據您的自變數清單,從沒有 provider 參數的多載中選取適當的多載。 例如,如果您的自變數清單有五個自變數,編譯程式會呼叫 Format(String, Object[]) 方法。 |
| 使用特定文化特性的慣例來格式化一或多個物件。 | 以 Format 參數開頭的每個 provider 多載,後續依次是一個 String 參數和一個或多個物件參數。 因此,您不需要判斷您想要呼叫的特定 Format 重載。 您的語言編譯程式會根據您的自變數清單,從具有 provider 參數的多載中選取適當的多載。 例如,如果您的自變數清單有五個自變數,編譯程式會呼叫 Format(IFormatProvider, String, Object[]) 方法。 |
| 使用 ICustomFormatter 實作或 IFormattable 實作來執行自定義格式設定作業。 | 具有 provider 參數的四個多載中的任何一個。 編譯程式會根據自變數清單,從具有 provider 參數的多載中選取適當的多載。 |
格式化方法概述
Format 方法的每個多載都會使用 複合格式功能,在複合格式字串中包含以零起始的索引佔位符,稱為 格式專案。 執行時,每個格式項目會被參數列表中對應參數的字串表示取代。 如果自變數的值是 null,則格式專案會取代為 String.Empty。 例如,下列對 Format(String, Object, Object, Object) 方法的呼叫中,有一個格式字串,內含三個格式項目:{0}、{1}和 {2},以及一個包含三個項目的參數清單。
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.
open System
let dat = DateTime(2012, 1, 17, 9, 30, 0)
let city = "Chicago"
let temp = -16
String.Format("At {0} in {1}, the temperature was {2} degrees.", dat, city, temp)
|> printfn "%s"
// 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.
格式項目
格式項目的語法如下:
{index[,width][:formatString]}
方括弧表示可選元素。 開啟和閉合的大括弧是必需的。 (若要在格式字串中包含實際的大括號,請參閱 複合格式設定 一文中的 大括號跳脫 一節。
例如,用於格式化貨幣值的格式項目可能會如此顯示:
var value = String.Format("{0,-10:C}", 126347.89m);
Console.WriteLine(value);
open System
String.Format("{0,-10:C}", 126347.89m)
|> printfn "%s"
String.Format("{0,-10:C}", 126347.89D)
格式項目包含以下元素:
index
自變數之以零起始的索引,其字串表示法要包含在字串中的這個位置。 如果這個參數是 null,將會在字串的該位置插入空字串。
width
Optional. 帶正負號的整數,表示插入自變數的欄位總長度,以及它是否靠右對齊(正整數)或靠左對齊(負整數)。 如果您省略 width,則對應自變數的字串表示會插入沒有前置或尾端空格的欄位中。
如果的值 width 小於要插入的自變數長度, width 則會忽略 ,並將自變數的字串表示長度當做字段寬度使用。
formatString
Optional. 指定對應自變數結果字串格式的字串。 如果您省略 formatString,則會呼叫對應的自變數無 ToString 參數方法,以產生其字串表示。 如果您指定 formatString,則格式專案所參考的自變數必須實 IFormattable 作 介面。 支援格式字串的類型包括:
DateTime 和 DateTimeOffset。 (請參閱 標準日期和時間格式字串 和 自定義日期和時間格式字串。
所有列舉型別。 (請參閱 列舉格式字串。)
TimeSpan 值。 (請參閱 標準 TimeSpan 格式字串 和 自定義 TimeSpan 格式字串。
GUIDs。 (請參閱 Guid.ToString(String) 方法。
不過,任何自訂類型都可以實作IFormattable或擴充現有類型的IFormattable實作。
下列範例會使用 width 和 formatString 自變數來產生格式化的輸出。
// 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 %
// Create a list of 5-tuples with population data for three U.S. cities, 1940-1950.
let cities =
[ "Los Angeles", DateTime(1940, 1, 1), 1504277, DateTime(1950, 1, 1), 1970358
"New York", DateTime(1940, 1, 1), 7454995, DateTime(1950, 1, 1), 7891957
"Chicago", DateTime(1940, 1, 1), 3396808, DateTime(1950, 1, 1), 3620962
"Detroit", DateTime(1940, 1, 1), 1623452, DateTime(1950, 1, 1), 1849568 ]
// Display header
String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n", "City", "Year", "Population", "Change (%)")
|> printfn "%s"
for name, year1, pop1, year2, pop2 in cities do
String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
name, year1, pop1, year2, pop2,
double (pop2 - pop1) / double pop1)
|> printfn "%s"
// 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 Example4
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 %
如何格式化自變數
格式專案會從字串開頭循序處理。 每個格式專案都有一個索引,對應至方法自變數清單中的物件。 Format 方法會擷取 自變數,並衍生其字串表示法,如下所示:
如果自變數是
null,則方法會將 String.Empty 插入結果字串中。 您不需要擔心處理空值參數的 NullReferenceException。如果您呼叫 Format(IFormatProvider, String, Object[]) 多載,而
provider物件的 IFormatProvider.GetFormat 實作將傳回非 null ICustomFormatter 實作,參數會被傳遞至其 ICustomFormatter.Format(String, Object, IFormatProvider) 方法。 如果格式項目包含formatString參數,它會作為第一個參數傳遞至方法。 如果 ICustomFormatter 實作可供使用,併產生非 Null 字串串,則會傳回該字串做為自變數的字串表示;否則,下一個步驟會執行。如果自變數實作 IFormattable 介面,則會呼叫其 IFormattable.ToString 實作。
呼叫自變數的無參數
ToString方法,該方法會覆寫或繼承自基類實作。
如需攔截對 ICustomFormatter.Format 方法呼叫的範例,並可讓您查看 Format 方法在複合格式字串中傳遞給每個格式專案的格式化方法的資訊,請參閱 範例:攔截提供者和羅馬數位格式器。
如需詳細資訊,請參閱 處理訂單。
格式化具有相同索引的項目
如果索引項目的索引值大於或等於參數列表中的參數數目,則 Format 方法會擲回 FormatException 例外狀況。 不過,format 可以包含比自變數更多的格式專案,只要多個格式專案具有相同的索引。 在下列範例中呼叫 Format(String, Object) 方法時,參數清單僅有一個參數,但格式字串包含兩個格式項目:一個顯示數字的十進位值,另一個顯示其十六進位值。
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
open System
let values= [| Int16.MinValue; -27s; 0s; 1042s; Int16.MaxValue |]
printfn "%10s %10s\n" "Decimal" "Hex"
for value in values do
String.Format("{0,10:G}: {0,10:X}", value)
|> printfn "%s"
// The example displays the following output:
// Decimal Hex
//
// -32768: 8000
// -27: FFE5
// 0: 0
// 1042: 412
// 32767: 7FFF
Module Example1
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
格式和文化
一般而言,引數清單中的物件會依據目前文化特性的慣例,轉換成其字串表示形式,而該慣例是由 CultureInfo.CurrentCulture 屬性傳回。 您可以透過呼叫包含 Format 參數的 provider 多載之一來控制此行為。
provider 參數是 IFormatProvider 實現,提供特定文化和自訂的格式資訊,用來調節格式化過程。
IFormatProvider 介面具有單一成員 GetFormat,負責傳回提供格式信息的物件。 .NET 有三個 IFormatProvider 實作,可提供特定文化特性的格式:
- CultureInfo。 其 GetFormat 方法會傳回特定文化特性 NumberFormatInfo 物件,以格式化數值,以及格式化日期和時間值的特定文化特性 DateTimeFormatInfo 物件。
- DateTimeFormatInfo,用於特定於文化的日期和時間值格式設定。 其 GetFormat 方法會返回自身。
- NumberFormatInfo,用於特定文化特性的數值格式設定。 其 GetFormat(Type) 方法會返回自身。
自訂格式設定作業
您也可以呼叫屬於 Format 方法的任何多載,其具有類型為 provider 的 IFormatProvider 參數,以執行自定義格式設定作業。 例如,您可以將整數格式化為標識碼或電話號碼。 若要執行自定義格式設定,您的 provider 自變數必須同時實作 IFormatProvider 和 ICustomFormatter 介面。 當 Format 方法以 ICustomFormatter 自變數的形式傳遞 provider 實作時,Format 方法會呼叫其 IFormatProvider.GetFormat 實作,並要求類型為 ICustomFormatter的物件。 然後,它會呼叫傳回的 ICustomFormatter 物件的 Format 方法,以格式化傳遞給它之複合字串中的每個格式專案。
如需提供自訂格式解決方案的詳細資訊,請參閱 如何:定義和使用自定義數值格式提供者 和 ICustomFormatter。 如需將整數轉換成格式化自訂數位的範例,請參閱 範例:自訂格式化作業。 如需將不帶正負號位元組轉換成羅馬數位的範例,請參閱 範例:攔截提供者和羅馬數位格式器。
範例:自定義格式設定作業
此範例會定義格式提供者,以 x-xxxxx-xx 格式,將整數值格式化為客戶帳戶號碼。
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.
open System
type CustomerFormatter() =
interface IFormatProvider with
member this.GetFormat(formatType) =
if formatType = typeof<ICustomFormatter> then
this
else
null
interface ICustomFormatter with
member this.Format(format, arg, formatProvider: IFormatProvider) =
if this.Equals formatProvider |> not then
null
else
let format =
if String.IsNullOrEmpty format then "G"
else format.ToUpper()
let customerString =
let s = string arg
if s.Length < 8 then
s.PadLeft(8, '0')
else s
match format with
| "G" ->
customerString.Substring(0, 1) + "-" +
customerString.Substring(1, 5) + "-" +
customerString.Substring 6
| "S" ->
customerString.Substring(0, 1) + "/" +
customerString.Substring(1, 5) + "/" +
customerString.Substring 6
| "P" ->
customerString.Substring(0, 1) + "." +
customerString.Substring(1, 5) + "." +
customerString.Substring 6
| _ ->
raise (FormatException $"The '{format}' format specifier is not supported.")
let acctNumber = 79203159
String.Format(CustomerFormatter(), "{0}", acctNumber)
|> printfn "%s"
String.Format(CustomerFormatter(), "{0:G}", acctNumber)
|> printfn "%s"
String.Format(CustomerFormatter(), "{0:S}", acctNumber)
|> printfn "%s"
String.Format(CustomerFormatter(), "{0:P}", acctNumber)
|> printfn "%s"
try
String.Format(CustomerFormatter(), "{0:X}", acctNumber)
|> printfn "%s"
with :? FormatException as e ->
printfn $"{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.
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.
範例:攔截器提供者和羅馬數字格式器
此範例會定義自定義格式提供者,以實作 ICustomFormatter 和 IFormatProvider 介面來執行兩件事:
- 它會顯示傳遞至其 ICustomFormatter.Format 實作的參數。 這可讓我們查看 Format(IFormatProvider, String, Object[]) 方法傳遞給其嘗試格式化之每個物件的自定義格式實作的參數。 在偵錯應用程式時,這會非常有用。
- 如果要格式化的物件是使用 「R」 標準格式字串格式化的不帶正負號位元組值,則自訂格式器會將數值格式化為羅馬數位。
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 FormatExample12
{
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
open System
open System.Globalization
type InterceptProvider() =
interface IFormatProvider with
member this.GetFormat(formatType) =
if formatType = typeof<ICustomFormatter> then
this
else
null
interface ICustomFormatter with
member _.Format(format, obj, provider: IFormatProvider) =
// Display information about method call.
let formatString =
if format = null then "<null>" else format
printfn $"Provider: {provider.GetType().Name}, Object: %A{obj}, Format String: %s{formatString}"
if obj = null then
String.Empty
else
// If this is a byte and the "R" format string, format it with Roman numerals.
match obj with
| :? byte as value when formatString.ToUpper().Equals "R" ->
let mutable returnString = String.Empty
// Get the hundreds digit(s)
let struct (result, remainder) = Math.DivRem(value, 100uy)
if result > 0uy then
returnString <- String('C', int result)
let value = byte remainder
// Get the 50s digit
let struct (result, remainder) = Math.DivRem(value, 50uy)
if result = 1uy then
returnString <- returnString + "L"
let value = byte remainder
// Get the tens digit.
let struct (result, remainder) = Math.DivRem(value, 10uy)
if result > 0uy then
returnString <- returnString + String('X', int result)
let value = byte remainder
// Get the fives digit.
let struct (result, remainder) = Math.DivRem(value, 5uy)
if result > 0uy then
returnString <- returnString + "V"
let value = byte remainder
// Add the ones digit.
if remainder > 0uy then
returnString <- returnString + String('I', int remainder)
// Check whether we have too many X characters.
let pos = returnString.IndexOf "XXXX"
if pos >= 0 then
let xPos = returnString.IndexOf "L"
returnString <-
if xPos >= 0 && xPos = pos - 1 then
returnString.Replace("LXXXX", "XC")
else
returnString.Replace("XXXX", "XL")
// Check whether we have too many I characters
let pos = returnString.IndexOf "IIII"
if pos >= 0 then
returnString <-
if returnString.IndexOf "V" >= 0 then
returnString.Replace("VIIII", "IX")
else
returnString.Replace("IIII", "IV")
returnString
// Use default for all other formatting.
| :? IFormattable as x ->
x.ToString(format, CultureInfo.CurrentCulture)
| _ ->
string obj
let n = 10
let value = 16.935
let day = DateTime.Now
let provider = InterceptProvider()
String.Format(provider, "{0:N0}: {1:C2} on {2:d}\n", n, value, day)
|> printfn "%s"
String.Format(provider, "{0}: {1:F}\n", "Today: ", DateTime.Now.DayOfWeek)
|> printfn "%s"
String.Format(provider, "{0:X}, {1}, {2}\n", 2uy, 12uy, 199uy)
|> printfn "%s"
String.Format(provider, "{0:R}, {1:R}, {2:R}\n", 2uy, 12uy, 199uy)
|> printfn "%s"
// 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 TypeOf obj Is IFormattable Then
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
FAQ
為什麼建議使用字串插補,而不是呼叫 String.Format 方法?
字串插補為:
- 更有彈性。 它可以在任何字串中使用,而不需要呼叫支持複合格式的方法。 否則,您必須呼叫 Format 方法或其他支援複合格式的方法,例如 Console.WriteLine 或 StringBuilder.AppendFormat。
- 更容易閱讀。 因為要插入字串的運算式會出現在插入運算式中,而不是出現在自變數清單中,因此插補字串更容易撰寫程式代碼和讀取。 插補字串也可用於字串串連作業,以產生更簡潔、更清楚的程序代碼。
透過比較以下兩個程式碼範例,可說明插值字串相較於字串串接和調用複合格式化方法的優越性。 在下列範例中,使用多個字串串連操作會產生冗長且難以閱讀的程式碼。
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.
open System
let names = [| "Balto"; "Vanya"; "Dakota"; "Samuel"; "Koani"; "Yiska"; "Yuma" |]
let output =
names[0] + ", " + names[1] + ", " + names[2] + ", " +
names[3] + ", " + names[4] + ", " + names[5] + ", " +
names[6] + "\n"
let date = DateTime.Now
output + String.Format("It is {0:t} on {0:d}. The day of the week is {1}.", date, date.DayOfWeek)
|> printfn "%s"
// 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 Example12
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 方法更清楚、更簡潔的代碼。
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.
open System
let names = [| "Balto"; "Vanya"; "Dakota"; "Samuel"; "Koani"; "Yiska"; "Yuma" |]
let output = $"{names[0]}, {names[1]}, {names[2]}, {names[3]}, {names[4]}, {names[5]}, {names[6]}"
let date = DateTime.Now
output + $"\nIt is {date:t} on {date:d}. The day of the week is {date.DayOfWeek}."
|> printfn "%s"
// 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 Example13
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.
哪裡可以找到預先定義的格式字串?
- 如需所有整數和浮點類型,請參閱 標準數值格式字串 和 自定義數值格式字串。
- 如需日期和時間值,請參閱 標準日期和時間格式字串 和 自定義日期和時間格式字串。
- 如需列舉值,請參閱 列舉格式字串。
- 如需 TimeSpan 值,請參閱 標準 TimeSpan 格式字串 和 自訂 TimeSpan 格式字串。
- 如需 Guid 值,請參閱 Guid.ToString(String) 參考頁面的備註部分。
如何控制取代格式項目的結果字串對齊方式?
格式專案的一般語法為:
{index[,width][: formatString]}
width 是定義欄位寬度的帶正負號整數。 如果此值為負值,則字段中的文字會靠左對齊。 如果是正數,文字會靠右對齊。
如何控制小數分隔符后的位數?
除了用於整數的「D」、以及「G」、「R」和「X」以外,所有 標準數值格式字串 都允許有一個小數位數的精確指定符來定義結果字串中的小數位數。 下列範例會使用標準數值格式字串來控制結果字串中的十進位數。
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 %
open System
let values: obj list = [ 1603, 1794.68235, 15436.14 ]
for value in values do
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.)
|> printfn "%s"
// 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 Example7
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」 格式規範來控制結果字串中的十進位數,如下列範例所示。
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
let value = 16309.5436m
String.Format("{0,12:#.00000} {0,12:0,000.00} {0,12:000.00#}", value)
|> printfn "%s"
// The example displays the following output:
// 16309.54360 16,309.54 16309.544
Module Example8
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
如何控制整數位數?
根據預設,格式化作業只會顯示非零整數數位。 如果您要格式化整數,您可以使用精確度規範搭配 "D" 和 "X" 標準格式字串來控制位數。
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
open System
let value = 1326
String.Format("{0,10:D6} {0,10:X8}", value)
|> printfn "%s"
// The example displays the following output:
// 001326 0000052E
Module Example10
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” 自定義數值格式規範,填補具有前置零的整數或浮點數,以產生具有指定整數數位數的結果字元串,如下列範例所示。
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
open System
let value = 16342
String.Format("{0,18:00000000} {0,18:00000000.000} {0,18:000,0000,000.0}", value)
|> printfn "%s"
// The example displays the following output:
// 00016342 00016342.000 0,000,016,342.0
Module Example9
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
我可以在格式清單中包含多少個專案?
沒有實際的限制。 Format(IFormatProvider, String, Object[]) 方法的第二個參數會以 ParamArrayAttribute 屬性標記,這可讓您將分隔清單或物件陣列包含在格式清單中。
如何在結果字串中包含字面大括號(「{」和「}」)?
例如,如何防止下列方法的呼叫擲回 FormatException 例外狀況?
result = String.Format("The text has {0} '{' characters and {1} '}' characters.",
nOpen, nClose);
let 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)
單個左大括弧或右大括弧一律會被解釋為格式項目的開頭或結尾。 若要以字面方式解譯,則必須跳脫它。 您可以透過新增另一個大括弧來跳脫大括弧 (“{{” 和 “}}”,而不是 “{” 和 “}”),如下列方法呼叫中所示:
string result;
int nOpen = 1;
int nClose = 2;
result = String.Format("The text has {0} '{{' characters and {1} '}}' characters.",
nOpen, nClose);
Console.WriteLine(result);
let 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)
不過,即使是逸出的大括弧也很容易被誤解。 我們建議您在格式列表中加入大括弧,並使用格式項目將它們插入到結果字串中,正如以下範例所示。
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);
let result =
String.Format("The text has {0} '{1}' characters and {2} '{3}' characters.", nOpen, "{", nClose, "}")
result = String.Format("The text has {0} '{1}' characters and {2} '{3}' characters.",
nOpen, "{", nClose, "}")
為什麼呼叫 String.Format 方法會擲回 FormatException?
例外狀況最常見的原因是格式專案的索引不會對應至格式清單中的物件。 這通常表示您已錯誤編號格式專案的索引,或忘記在格式清單中包含物件。 試著包含未進行轉義的左大括弧或右大括號字元,也會引發 FormatException。 有時候,例外狀況是錯字的結果;例如,典型的錯誤是輸入 “[” (左括弧)而不是 “{” (左大括弧)。
如果 Format(System.IFormatProvider,System.String,System.Object[]) 方法支持參數陣列,為什麼我的程式碼在使用陣列時擲回例外狀況?
例如,下列程式代碼會擲回 FormatException 例外狀況:
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($"{numbers} + {1} + {2} = {3}");
open System
let rnd = Random()
let mutable total = 0
let numbers = Array.zeroCreate<int> 4
for i = 0 to 2 do
let number = rnd.Next 1001
numbers[i] <- number
total <- total + number
numbers[3] <- total
Console.WriteLine("{0} + {1} + {2} = {3}", numbers)
Module Example5a
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
這是編譯器多載解析的問題。 因為編譯程式無法將整數數位轉換成物件陣列,所以它會將整數數位視為單一自變數,因此它會呼叫 Format(String, Object) 方法。 因為有四個格式專案,但格式清單中只有單一專案,因此會擲回例外狀況。
因為 Visual Basic 和 C# 都無法將整數數位轉換成物件陣列,因此您必須先自行執行轉換,再呼叫 Format(String, Object[]) 方法。 下列範例提供一個實作。
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($"{values} + {1} + {2} = {3}");
open System
let rnd = Random()
let numbers = Array.zeroCreate<int> 4
let mutable total = 0
for i = 0 to 2 do
let number = rnd.Next 1001
numbers[i] <- number
total <- total + number
numbers[3] <- total
let values = Array.zeroCreate<obj> numbers.Length
numbers.CopyTo(values, 0)
Console.WriteLine("{0} + {1} + {2} = {3}", values)
Imports System.Collections.Generic
Module Example6
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
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
Format(IFormatProvider, String, Object, Object, Object)
將字串中的格式專案取代為三個指定物件的字串表示。 參數提供特定文化特性的格式資訊。
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);
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
物件,提供特定文化特性的格式資訊。
- arg0
- Object
要格式化的第一個物件。
- arg1
- Object
要格式化的第二個物件。
- arg2
- Object
要格式化的第三個物件。
傳回
一個將格式項目替換為 、 formatarg0、 arg1和 的字串表示的副本arg2。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將三個表達式轉換為字串表示,並將這些表示嵌入字串中。 在執行轉換時,方法會使用區分文化特性的格式或自定義格式器。 該方法透過呼叫 Object 方法,或若物件對應格式項目包含格式字串,則呼叫其 ToString(String,IFormatProvider) 方法,將每個參數轉換為字串表示。 如果這些方法不存在,則會呼叫物件的無參數 ToString 方法。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用一個提供文化敏感或自訂格式的物件,以及包含一個或多個格式項目的 複合格式字串 來呼叫這個方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
適用於
Format(IFormatProvider, String, Object, Object)
將字串中的格式專案取代為兩個指定物件的字串表示。 參數提供特定文化特性的格式資訊。
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);
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
物件,提供特定文化特性的格式資訊。
- arg0
- Object
要格式化的第一個物件。
- arg1
- Object
要格式化的第二個物件。
傳回
一個 的format副本,其中格式項目被 和 的arg0arg1字串表示取代。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將兩個表達式轉換為字串表示,並將這些表示嵌入字串中。 在執行轉換時,方法會使用區分文化特性的格式或自定義格式器。 該方法透過呼叫 Object 方法,或若物件對應格式項目包含格式字串,則呼叫其 ToString(String,IFormatProvider) 方法,將每個參數轉換為字串表示。 如果這些方法不存在,則會呼叫物件的無參數 ToString 方法。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用一個提供文化敏感或自訂格式的物件,以及包含一個或多個格式項目的 複合格式字串 來呼叫這個方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
適用於
Format(String, Object, Object)
將字串中的格式專案取代為兩個指定物件的字串表示。
public:
static System::String ^ Format(System::String ^ format, System::Object ^ arg0, System::Object ^ arg1);
public static string Format(string format, object arg0, 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
要格式化的第一個物件。
- arg1
- Object
要格式化的第二個物件。
傳回
一個 的format副本,其中格式項目被 和 的arg0arg1字串表示取代。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將兩個表達式的值轉換為字串表示,並將這些表示嵌入字串中。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用包含一個或多個格式項目的 複合格式字串 呼叫此方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
範例:格式化兩個自變數
此範例使用該 Format(String, Object, Object) 方法顯示儲存在通用 Dictionary<TKey,TValue> 物件中的時間與溫度資料。 請注意,格式字串有三個格式項目,不過只有兩個物件可格式化。 這是因為清單中的第一個物件(日期和時間值)是由兩個格式專案使用:第一個格式專案會顯示時間,而第二個則顯示日期。
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
open System
open System.Collections.Generic
let temperatureInfo = Dictionary<DateTime, float>()
temperatureInfo.Add(DateTime(2010, 6, 1, 14, 0, 0), 87.46)
temperatureInfo.Add(DateTime(2010, 12, 1, 10, 0, 0), 36.81)
printfn $"Temperature Information:\n"
for item in temperatureInfo do
String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", item.Key, item.Value)
|> printfn "%s"
// 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
另請參閱
- .NET 中的格式化類型
- 複合格式設定
- 標準日期和時間格式字串
- 自訂日期和時間格式字串
- 標準數值格式字串
- 自訂數值格式字串
- 標準 TimeSpan 格式字串
- 自定義 TimeSpan 格式字串
- 列舉格式字串
適用於
Format(IFormatProvider, CompositeFormat, ReadOnlySpan<Object>)
以指定格式中對應物件的字串表示來取代格式 CompositeFormat 項目。
public:
static System::String ^ Format(IFormatProvider ^ provider, System::Text::CompositeFormat ^ format, ReadOnlySpan<System::Object ^> args);
public static string Format(IFormatProvider? provider, System.Text.CompositeFormat format, scoped ReadOnlySpan<object?> args);
public static string Format(IFormatProvider? provider, System.Text.CompositeFormat format, ReadOnlySpan<object?> args);
static member Format : IFormatProvider * System.Text.CompositeFormat * ReadOnlySpan<obj> -> string
Public Shared Function Format (provider As IFormatProvider, format As CompositeFormat, args As ReadOnlySpan(Of Object)) As String
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- format
- CompositeFormat
- args
- ReadOnlySpan<Object>
要格式化的物件範圍。
傳回
格式化的字串。
例外狀況
format 是 null。
格式專案的索引大於或等於提供的自變數數目。
適用於
Format(IFormatProvider, CompositeFormat, Object[])
以指定格式中對應物件的字串表示來取代格式 CompositeFormat 項目。
public:
static System::String ^ Format(IFormatProvider ^ provider, System::Text::CompositeFormat ^ format, ... cli::array <System::Object ^> ^ args);
public static string Format(IFormatProvider? provider, System.Text.CompositeFormat format, params object?[] args);
static member Format : IFormatProvider * System.Text.CompositeFormat * obj[] -> string
Public Shared Function Format (provider As IFormatProvider, format As CompositeFormat, ParamArray args As Object()) As String
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- format
- CompositeFormat
- args
- Object[]
要格式化的物件陣列。
傳回
格式化的字串。
例外狀況
format 或 args 為 null。
格式專案的索引大於或等於提供的自變數數目。
適用於
Format(String, Object, Object, Object)
將字串中的格式專案取代為三個指定物件的字串表示。
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);
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
要格式化的第一個物件。
- arg1
- Object
要格式化的第二個物件。
- arg2
- Object
要格式化的第三個物件。
傳回
一個將格式項目替換為 、 formatarg0、 arg1和 的字串表示的副本arg2。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將三個表達式的值轉換為字串表示,並將這些表示嵌入字串中。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用包含一個或多個格式項目的 複合格式字串 呼叫此方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
範例:格式化三個自變數
本範例使用此 Format(String, Object, Object, Object) 方法建立一個字串,說明兩個整數值布林 And 運算的結果。 請注意,格式字串包含六個格式專案,但方法在其參數清單中只有三個專案,因為每個專案都是以兩種不同的方式格式化。
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)
open System
let formatString =
" {0,10} ({0,8:X8})\nAnd {1,10} ({1,8:X8})\n = {2,10} ({2,8:X8})"
let value1 = 16932
let value2 = 15421
String.Format(formatString, value1, value2, value1 &&& value2)
|> printfn "%s"
// 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[])
將字串中的格式專案取代為指定數位中對應物件的字串表示。 參數提供特定文化特性的格式資訊。
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);
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
物件,提供特定文化特性的格式資訊。
- args
- Object[]
對象陣列,其中包含要格式化的零個或多個物件。
傳回
一個將格式項目替換為對應物件format的字串表示的副本args。
例外狀況
format 或 args 為 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將四個或以上表達式轉換為字串表示,並將這些表示嵌入字串中。 在執行轉換時,方法會使用區分文化特性的格式或自定義格式器。 該方法透過呼叫 Object 方法,或若物件對應格式項目包含格式字串,則呼叫其 ToString(String,IFormatProvider) 方法,將每個參數轉換為字串表示。 如果這些方法不存在,則會呼叫物件的無參數 ToString 方法。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用一個提供文化敏感或自訂格式的物件,以及包含一個或多個格式項目的 複合格式字串 來呼叫這個方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
範例:區分文化特性的格式設定
本範例使用該 Format(IFormatProvider, String, Object[]) 方法,透過多種不同文化來顯示某些日期、時間值及數值的字串表示。
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)
{
System.Globalization.CultureInfo culture = new System.Globalization.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
open System
open System.Globalization
let cultureNames = [| "en-US"; "fr-FR"; "de-DE"; "es-ES" |]
let dateToDisplay = DateTime(2009, 9, 1, 18, 32, 0)
let value = 9164.32
printfn "Culture Date Value\n"
for cultureName in cultureNames do
let culture = CultureInfo cultureName
String.Format(culture, "{0,-11} {1,-35:D} {2:N}", culture.Name, dateToDisplay, value)
|> printfn "%s"
// 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 Example2
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
另請參閱
- DateTimeFormatInfo
- ICustomFormatter
- IFormatProvider
- NumberFormatInfo
- .NET 中的格式化類型
- 複合格式設定
- 標準日期和時間格式字串
- 自訂日期和時間格式字串
- 標準數值格式字串
- 自訂數值格式字串
- 標準 TimeSpan 格式字串
- 自定義 TimeSpan 格式字串
- 列舉格式字串
適用於
Format(IFormatProvider, String, Object)
將指定字串中的格式專案或專案取代為對應物件的字串表示。 參數提供特定文化特性的格式資訊。
public:
static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, System::Object ^ arg0);
public static string Format(IFormatProvider provider, string format, 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
物件,提供特定文化特性的格式資訊。
- arg0
- Object
要格式化的物件。
傳回
一個將格式項目或多個項目替換為字format串表示的複本arg0。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式功能 將表達式的值轉換為字串表示,並將該表示嵌入字串中。 在執行轉換時,方法會使用區分文化特性的格式或自定義格式器。 該方法透過 arg0 呼叫其 ToString(IFormatProvider) 方法轉換成字串表示,或若物件對應的格式項目包含格式字串,則呼叫其 ToString(String,IFormatProvider) 方法。 如果這些方法不存在,則會呼叫物件的無參數 ToString 方法。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用一個提供文化敏感或自訂格式的物件,以及包含一個或多個格式項目的 複合格式字串 來呼叫這個方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
適用於
Format(String, ReadOnlySpan<Object>)
將指定字串中的格式專案取代為指定範圍中對應物件的字串表示。
public:
static System::String ^ Format(System::String ^ format, ReadOnlySpan<System::Object ^> args);
public static string Format(string format, scoped ReadOnlySpan<object?> args);
static member Format : string * ReadOnlySpan<obj> -> string
Public Shared Function Format (format As String, args As ReadOnlySpan(Of Object)) As String
參數
- args
- ReadOnlySpan<Object>
物件範圍,包含零個或多個要格式化的物件。
傳回
一個將格式項目替換為對應物件format的字串表示的副本args。
適用於
Format(String, Object[])
將指定字串中的格式專案取代為指定數位中對應物件的字串表示。
public:
static System::String ^ Format(System::String ^ format, ... cli::array <System::Object ^> ^ args);
public static string Format(string format, params 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[]
對象陣列,其中包含要格式化的零個或多個物件。
傳回
一個將格式項目替換為對應物件format的字串表示的副本args。
例外狀況
format 或 args 為 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式化功能 ,將四個或以上表達式的值轉換為其字串表示,並將這些表示嵌入字串中。 由於 args 參數以屬性標記 System.ParamArrayAttribute ,你可以將物件以個別參數 Object 或陣列形式傳遞給方法。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用包含一個或多個格式項目的 複合格式字串 呼叫此方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
範例:格式化三個以上的自變數
此範例會建立字串,其中包含特定日期中高溫和低溫的數據。 複合格式字串在 C# 範例中有五個格式專案,Visual Basic 範例中有 6 個格式專案。 其中兩個格式專案會定義其對應值字串表示的寬度,而第一個格式專案也包含標準日期和時間格式字串。
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)
let date1 = DateTime(2009, 7, 1)
let hiTime = TimeSpan(14, 17, 32)
let hiTemp = 62.1m
let loTime = TimeSpan(3, 16, 10)
let loTemp = 54.8m
String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", date1, hiTime, hiTemp, loTime, loTemp)
|> printfn "%s\n"
String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", [| date1 :> obj; hiTime; hiTemp; loTime; loTemp |])
|> printfn "%s"
// 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)
您也可以傳遞要格式化為數位的物件,而不是做為自變數清單。
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 FormatExample10
{
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
open System
type CityInfo =
{ Name: string
Population: int
Area: Decimal
Year: int }
let showPopulationData city =
let args: obj[] = [| city.Name; city.Year; city.Population; city.Area |]
String.Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", args)
|> printfn "%s"
{ Name = "New York"; Population = 8175133; Area = 302.64m; Year = 2010 }
|> showPopulationData
{ Name = "Seattle"; Population = 608660; Area = 83.94m; Year = 2010 }
|> showPopulationData
// 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
另請參閱
- .NET 中的格式化類型
- 複合格式設定
- 標準日期和時間格式字串
- 自訂日期和時間格式字串
- 標準數值格式字串
- 自訂數值格式字串
- 標準 TimeSpan 格式字串
- 自定義 TimeSpan 格式字串
- 列舉格式字串
適用於
Format(String, Object)
以指定物件的字串表示取代字串中的一或多個格式專案。
public:
static System::String ^ Format(System::String ^ format, System::Object ^ arg0);
public static string Format(string format, 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
要格式化的物件。
傳回
一個將任意格式項目替換為字format串表示的副本arg0。
例外狀況
format 是 null。
備註
Important
如果您的語言支援 ,您可以使用 插補字串,而不是呼叫 String.Format 方法,或使用 複合格式字符串。 插補字串是包含 插補表示式的字串,。 每個內插表達式都會根據表達式的值進行解析,並在字串被指派時包含在結果字串中。 欲了解更多資訊,請參閱字串插值(C# 參考)及插值字串(Visual Basic 參考)。
此方法利用 複合格式功能 將表達式的值轉換為字串表示,並將該表示嵌入字串中。
然而,在呼叫 String.Format 方法時,不必專注於你想要呼叫的特定過載。 相反地,你可以用包含一個或多個格式項目的 複合格式字串 呼叫此方法。 您會為每個格式專案指派數值索引;第一個索引從 0 開始。 除了初始字串之外,您的方法呼叫應該有與索引值一樣多的額外自變數。 例如,格式專案具有 0 和 1 索引的字串應該有 2 個自變數;具有索引 0 到 5 的其中一個應該有 6 個自變數。 語言編譯器接著會將你的方法呼叫解析為方法的特定過載 String.Format 。
關於使用此 String.Format 方法的更詳細文件,請參閱 「開始使用String.Format方法 」及「 我該呼叫哪個方法?」。
範例:格式化單一自變數
以下範例使用此 Format(String, Object) 方法,將個人年齡嵌入字串中間。
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.
let birthdate = DateTime(1993, 7, 28)
let dates =
[ DateTime(1993, 8, 16)
DateTime(1994, 7, 28)
DateTime(2000, 10, 16)
DateTime(2003, 7, 27)
DateTime(2007, 5, 27) ]
for dateValue in dates do
let interval = dateValue - birthdate
// Get the approximate number of years, without accounting for leap years.
let years = (int interval.TotalDays) / 365
// See if adding the number of years exceeds dateValue.
if birthdate.AddYears years <= dateValue then
String.Format("You are now {0} years old.", years)
else
String.Format("You are now {0} years old.", years - 1)
|> printfn "%s"
// 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.
另請參閱
- .NET 中的格式化類型
- 複合格式設定
- 標準日期和時間格式字串
- 自訂日期和時間格式字串
- 標準數值格式字串
- 自訂數值格式字串
- 標準 TimeSpan 格式字串
- 自定義 TimeSpan 格式字串
- 列舉格式字串
適用於
Format(IFormatProvider, String, ReadOnlySpan<Object>)
將字串中的格式專案取代為指定範圍中對應物件的字串表示。 參數提供特定文化特性的格式資訊。
public:
static System::String ^ Format(IFormatProvider ^ provider, System::String ^ format, ReadOnlySpan<System::Object ^> args);
public static string Format(IFormatProvider? provider, string format, scoped ReadOnlySpan<object?> args);
static member Format : IFormatProvider * string * ReadOnlySpan<obj> -> string
Public Shared Function Format (provider As IFormatProvider, format As String, args As ReadOnlySpan(Of Object)) As String
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- args
- ReadOnlySpan<Object>
物件範圍,包含零個或多個要格式化的物件。
傳回
一個將格式項目替換為對應物件format的字串表示的副本args。
適用於
Format<TArg0,TArg1,TArg2>(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2)
以指定格式中對應物件的字串表示來取代格式 CompositeFormat 項目。
public:
generic <typename TArg0, typename TArg1, typename TArg2>
static System::String ^ Format(IFormatProvider ^ provider, System::Text::CompositeFormat ^ format, TArg0 arg0, TArg1 arg1, TArg2 arg2);
public static string Format<TArg0,TArg1,TArg2>(IFormatProvider? provider, System.Text.CompositeFormat format, TArg0 arg0, TArg1 arg1, TArg2 arg2);
static member Format : IFormatProvider * System.Text.CompositeFormat * 'TArg0 * 'TArg1 * 'TArg2 -> string
Public Shared Function Format(Of TArg0, TArg1, TArg2) (provider As IFormatProvider, format As CompositeFormat, arg0 As TArg0, arg1 As TArg1, arg2 As TArg2) As String
類型參數
- TArg0
要格式化之第一個物件的型別。
- TArg1
要格式化的第二個物件型別。
- TArg2
要格式化的第三個物件型別。
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- format
- CompositeFormat
- arg0
- TArg0
要格式化的第一個物件。
- arg1
- TArg1
要格式化的第二個物件。
- arg2
- TArg2
要格式化的第三個物件。
傳回
格式化的字串。
例外狀況
format 是 null。
格式專案的索引大於或等於提供的自變數數目。
適用於
Format<TArg0,TArg1>(IFormatProvider, CompositeFormat, TArg0, TArg1)
以指定格式中對應物件的字串表示來取代格式 CompositeFormat 項目。
public:
generic <typename TArg0, typename TArg1>
static System::String ^ Format(IFormatProvider ^ provider, System::Text::CompositeFormat ^ format, TArg0 arg0, TArg1 arg1);
public static string Format<TArg0,TArg1>(IFormatProvider? provider, System.Text.CompositeFormat format, TArg0 arg0, TArg1 arg1);
static member Format : IFormatProvider * System.Text.CompositeFormat * 'TArg0 * 'TArg1 -> string
Public Shared Function Format(Of TArg0, TArg1) (provider As IFormatProvider, format As CompositeFormat, arg0 As TArg0, arg1 As TArg1) As String
類型參數
- TArg0
要格式化之第一個物件的型別。
- TArg1
要格式化的第二個物件型別。
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- format
- CompositeFormat
- arg0
- TArg0
要格式化的第一個物件。
- arg1
- TArg1
要格式化的第二個物件。
傳回
格式化的字串。
例外狀況
format 是 null。
格式專案的索引大於或等於提供的自變數數目。
適用於
Format<TArg0>(IFormatProvider, CompositeFormat, TArg0)
以指定格式中對應物件的字串表示來取代格式 CompositeFormat 項目。
public:
generic <typename TArg0>
static System::String ^ Format(IFormatProvider ^ provider, System::Text::CompositeFormat ^ format, TArg0 arg0);
public static string Format<TArg0>(IFormatProvider? provider, System.Text.CompositeFormat format, TArg0 arg0);
static member Format : IFormatProvider * System.Text.CompositeFormat * 'TArg0 -> string
Public Shared Function Format(Of TArg0) (provider As IFormatProvider, format As CompositeFormat, arg0 As TArg0) As String
類型參數
- TArg0
要格式化之第一個物件的型別。
參數
- provider
- IFormatProvider
物件,提供特定文化特性的格式資訊。
- format
- CompositeFormat
- arg0
- TArg0
要格式化的第一個物件。
傳回
格式化的字串。
例外狀況
format 是 null。
格式專案的索引大於或等於提供的自變數數目。