IFormattable.ToString(String, IFormatProvider) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Formaterar värdet för den aktuella instansen med det angivna formatet.
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
Parametrar
- format
- String
Formatet som ska användas.
-eller-
En null-referens (Nothing i Visual Basic) för att använda standardformatet som definierats för typen av implementeringen IFormattable.
- formatProvider
- IFormatProvider
Providern som ska användas för att formatera värdet.
-eller-
En null-referens (Nothing i Visual Basic) för att hämta numerisk formatinformation från den aktuella nationella inställningen för operativsystemet.
Returer
Värdet för den aktuella instansen i det angivna formatet.
Exempel
I följande exempel visas en Temperature klass som implementerar ToString metoden. Det här kodexemplet är en del av ett större exempel för IFormattable klassen.
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
Kommentarer
Metoden ToString konverterar ett värde till en strängrepresentation som kan uttryckas på flera sätt. Dess exakta format beror på specifika symboler eller en angiven ordning som definieras av specifika kulturer, yrken eller branscher. Du kan anropa metoden direkt. Den anropas också automatiskt av metoderna Convert.ToString(Object) och Convert.ToString(Object, IFormatProvider) och av metoder som använder funktionen sammansatt formatering i .NET Framework, till exempel String.Format(String, Object[]), Console.WriteLine(String, Object[]) och StringBuilder.AppendFormat(String, Object[]). (Mer information finns i Sammansatt formatering.)
Sammansatta formateringsmetoder anropar ToString metoden en gång för varje formatobjekt i en formatsträng. Parametrarna som skickas till metoden beror på den specifika formateringsmetod som anropas och på innehållet i formatobjektet enligt följande:
Om formatobjektet inte innehåller en formatsträng (till exempel om formatobjektet bara
{0}är ) skickasnulldet som värdet för parametern System.String .Om formatobjektet innehåller en formatsträng (till exempel
{0:G}), skickas formatsträngen som värdet för parametern System.String .Om det ursprungliga metodanropet inte innehåller någon System.IFormatProvider parameter CultureInfo.CurrentCulture skickas det som värdet för parametern System.IFormatProvider .
Om det ursprungliga metodanropet innehåller en System.IFormatProvider parameter skickas providern som anges i metodanropet som värdet för parametern System.IFormatProvider .
Note
Implementeringen av ett objekt anropas endast av sammansatta formateringsmetoder om de inte skickas ToString till en ICustomFormatter formatprovider, eller om Format metoden för providern för anpassat format returnerar null.
.NET Framework innehåller tre formatproviders, som alla implementerar gränssnittet IFormatProvider:
NumberFormatInfo tillhandahåller numerisk formateringsinformation, till exempel de tecken som ska användas för decimaltecken och gruppavgränsare, samt stavning och placering av valutasymboler i monetära värden.
DateTimeFormatInfo tillhandahåller datumrelaterad och tidsrelaterad formateringsinformation, till exempel månadens position, dagen och året i ett datummönster.
CultureInfo innehåller standardformateringsinformationen i en specifik kultur, inklusive information om numeriskt format och datumrelaterad och tidsrelaterad formateringsinformation.
Dessutom kan du definiera en egen leverantör för anpassat format.
Anteckningar till implementerare
Metoden ToString(String, IFormatProvider) måste ha stöd för formatspecificeraren "G" (allmänt). Förutom "G"-specificeraren kan klassen definiera listan över formatspecificerare som den stöder. Dessutom måste klassen vara beredd att hantera en formatspecificerare som är null. Mer information om formaterings- och formateringskoder finns i Formateringstyper.