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
使用哪個服務提供者來格式化這個數值。
-或-
一個空參考(Nothing in Visual Basic)用來從作業系統目前的區域設定取得數值格式資訊。
傳回
目前實例在指定格式下的值。
範例
以下範例示範一個 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}為 ),則會以參數值null傳遞System.String。若格式項目包含格式字串(例如),
{0:G}則該格式字串作為參數值 System.String 傳遞。如果原始方法呼叫中沒有包含 System.IFormatProvider 參數,則 CultureInfo.CurrentCulture 會以該 System.IFormatProvider 參數的值傳遞。
如果原始方法呼叫包含 System.IFormatProvider 參數,則該方法呼叫中提供的提供者會以該 System.IFormatProvider 參數的值傳遞。
Note
ToString只有當複合格式化方法未傳遞ICustomFormatter格式提供者,或自訂格式提供者的方法回Format傳 null時,物件的實作才會被呼叫。
.NET 框架包含三個格式提供者,皆實作 IFormatProvider 介面:
NumberFormatInfo 提供數字格式資訊,例如用於十進位與組分隔符的字元,以及貨幣符號在貨幣價值中的拼寫與位置。
DateTimeFormatInfo 提供與日期及時間相關的格式資訊,例如月份的位置、日期及年份,並以日期模式呈現。
CultureInfo 包含特定文化中的預設格式資訊,包括數字格式資訊,以及與日期和時間相關的格式資訊。
此外,你也可以自訂自訂格式的服務提供者。
給實施者的注意事項
該 ToString(String, IFormatProvider) 方法必須支援「G」(一般)格式指定符。 除了「G」這個指定符外,該類別還可以定義它所支援的格式指定符清單。 此外,類別必須準備好處理格式 null指定符。 欲了解更多關於格式及格式代碼的資訊,請參閱 格式類型。