IFormattable.ToString(String, IFormatProvider) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
使用指定的格式,格式化目前執行個體的值。
public:
System::String ^ ToString(System::String ^ format, IFormatProvider ^ formatProvider);
public string ToString (string format, IFormatProvider formatProvider);
public string ToString (string? format, IFormatProvider? formatProvider);
abstract member ToString : string * IFormatProvider -> string
Public Function ToString (format As String, formatProvider As IFormatProvider) As String
參數
- formatProvider
- IFormatProvider
用於格式化值的提供者。
-或-
若要取得作業系統之目前地區設定中的數值格式資訊,則為 Null 參考 (在 Visual Basic 中為 Nothing
)。
傳回
採用指定格式之目前執行個體的值。
範例
下列範例示範實 Temperature
作 方法的 ToString 類別。 此程式碼範例是提供給 類別之較大範例的 IFormattable 一部分。
using System;
using System.Globalization;
public class Temperature : IFormattable
{
private decimal temp;
public Temperature(decimal temperature)
{
if (temperature < -273.15m)
throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.",
temperature));
this.temp = temperature;
}
public decimal Celsius
{
get { return temp; }
}
public decimal Fahrenheit
{
get { return temp * 9 / 5 + 32; }
}
public decimal Kelvin
{
get { return temp + 273.15m; }
}
public override string ToString()
{
return this.ToString("G", CultureInfo.CurrentCulture);
}
public string ToString(string format)
{
return this.ToString(format, CultureInfo.CurrentCulture);
}
public string ToString(string format, IFormatProvider provider)
{
if (String.IsNullOrEmpty(format)) format = "G";
if (provider == null) provider = CultureInfo.CurrentCulture;
switch (format.ToUpperInvariant())
{
case "G":
case "C":
return temp.ToString("F2", provider) + " °C";
case "F":
return Fahrenheit.ToString("F2", provider) + " °F";
case "K":
return Kelvin.ToString("F2", provider) + " K";
default:
throw new FormatException(String.Format("The {0} format string is not supported.", format));
}
}
}
open System
open System.Globalization
type Temperature(temperature: decimal) =
do
if temperature < -273.15M then
raise (ArgumentOutOfRangeException $"{temperature} is less than absolute zero.")
member _.Celsius =
temperature
member _.Fahrenheit =
temperature * 9M / 5M + 32M
member _.Kelvin =
temperature + 273.15m
override this.ToString() =
this.ToString("G", CultureInfo.CurrentCulture)
member this.ToString(format) =
this.ToString(format, CultureInfo.CurrentCulture)
member this.ToString(format, provider: IFormatProvider) =
let format =
if String.IsNullOrEmpty format then "G"
else format
let provider =
if isNull provider then
CultureInfo.CurrentCulture :> IFormatProvider
else provider
match format.ToUpperInvariant() with
| "G" | "C" ->
temperature.ToString("F2", provider) + " °C"
| "F" ->
this.Fahrenheit.ToString("F2", provider) + " °F"
| "K" ->
this.Kelvin.ToString("F2", provider) + " K"
| _ ->
raise (FormatException $"The {format} format string is not supported.")
interface IFormattable with
member this.ToString(format, provider) = this.ToString(format, provider)
Imports System.Globalization
Public Class Temperature : Implements IFormattable
Private temp As Decimal
Public Sub New(temperature As Decimal)
If temperature < -273.15 Then _
Throw New ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", _
temperature))
Me.temp = temperature
End Sub
Public ReadOnly Property Celsius As Decimal
Get
Return temp
End Get
End Property
Public ReadOnly Property Fahrenheit As Decimal
Get
Return temp * 9 / 5 + 32
End Get
End Property
Public ReadOnly Property Kelvin As Decimal
Get
Return temp + 273.15d
End Get
End Property
Public Overrides Function ToString() As String
Return Me.ToString("G", CultureInfo.CurrentCulture)
End Function
Public Overloads Function ToString(fmt As String) As String
Return Me.ToString(fmt, CultureInfo.CurrentCulture)
End Function
Public Overloads Function ToString(fmt As String, provider As IFormatProvider) _
As String _
Implements IFormattable.ToString
If String.IsNullOrEmpty(fmt) Then fmt = "G"
If provider Is Nothing Then provider = CultureInfo.CurrentCulture
Select Case fmt.ToUpperInvariant()
Case "G", "C"
Return temp.ToString("F2", provider) + " °C"
Case "F"
Return Fahrenheit.ToString("F2", provider) + " °F"
Case "K"
Return Kelvin.ToString("F2", provider) + " K"
Case Else
Throw New FormatException(String.Format("The {0} format string is not supported.", fmt))
End Select
End Function
End Class
備註
方法 ToString 會將值轉換成可以用多種方式表示的字串表示。 其精確格式取決於特定文化特性、專業或產業所定義的特定符號或指定順序。 您可以直接呼叫 方法。 它也會由 Convert.ToString(Object) 和 Convert.ToString(Object, IFormatProvider) 方法自動呼叫,以及使用.NET Framework中複合格式功能的方法,例如 String.Format(String, Object[]) 、 Console.WriteLine(String, Object[]) 和 StringBuilder.AppendFormat(String, Object[]) 。 (如需詳細資訊,請參閱 複合格式。)
複合格式方法會針對格式字串中的每個格式專案呼叫 ToString 方法一次。 傳遞至 方法的參數取決於呼叫的特定格式方法,以及格式專案的內容,如下所示:
例如,如果格式專案不包含格式字串 (,如果格式專案只是
{0}
) ,則會當做 參數的值 System.String 傳遞null
。例如,如果格式專案包含格式字串 ()
{0:G}
,該格式字串會當做 參數的值 System.String 傳遞。如果原始方法呼叫不包含 System.IFormatProvider 參數, CultureInfo.CurrentCulture 則會傳遞為 參數的值 System.IFormatProvider 。
如果原始方法呼叫包含 System.IFormatProvider 參數,則方法呼叫中提供的提供者會當做 參數的值 System.IFormatProvider 傳遞。
注意
只有當物件 ToString 未傳遞 ICustomFormatter 格式提供者,或 Format 自訂格式提供者的 方法傳回 null
時,複合格式方法才會呼叫物件的實作。
.NET Framework包含三個格式提供者,全部實作 IFormatProvider 介面:
NumberFormatInfo 提供數值格式資訊,例如用於小數和群組分隔符號的字元,以及貨幣符號在貨幣值中的拼字和放置。
DateTimeFormatInfo 會提供日期相關和時間相關的格式資訊,例如月份的位置、日和日期模式中的年份。
CultureInfo 包含特定文化特性中的預設格式資訊,包括數值格式資訊,以及日期相關與時間相關的格式資訊。
此外,您可以定義自己的自訂格式提供者。
給實施者的注意事項
方法 ToString(String, IFormatProvider) 必須支援 「G」 (一般) 格式規範。 除了 「G」 規範之外,類別還可以定義它支援的格式規範清單。 此外,類別必須準備好處理為 的格式規範 null
。 如需格式化和格式化程式碼的詳細資訊,請參閱 格式化類型。