String.Format Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Převede hodnotu objektů na řetězce na základě zadaných formátů a vloží je do jiného řetězce.
Pokud s metodou String.Format začínáte, podívejte se na článek Začínáme s metodou String.Format , kde najdete rychlý přehled.
Přetížení
| Name | Description |
|---|---|
| Format(IFormatProvider, String, Object, Object, Object) |
Nahradí položky formátu v řetězci řetězcovou reprezentací tří zadaných objektů. Parametr poskytuje informace o formátování specifické pro jazykovou verzi. |
| Format(IFormatProvider, String, Object, Object) |
Nahradí položky formátu v řetězci řetězcovou reprezentací dvou zadaných objektů. Parametr poskytuje informace o formátování specifické pro jazykovou verzi. |
| Format(String, Object, Object) |
Nahradí položky formátu v řetězci řetězcovou reprezentací dvou zadaných objektů. |
| Format(IFormatProvider, CompositeFormat, ReadOnlySpan<Object>) |
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu. |
| Format(IFormatProvider, CompositeFormat, Object[]) |
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu. |
| Format(String, Object, Object, Object) |
Nahradí položky formátu v řetězci řetězcovou reprezentací tří zadaných objektů. |
| Format(IFormatProvider, String, Object[]) |
Nahradí položky formátu v řetězci řetězcovou reprezentací odpovídajících objektů v zadaném poli. Parametr poskytuje informace o formátování specifické pro jazykovou verzi. |
| Format(IFormatProvider, String, Object) |
Nahradí položku formátu nebo položky v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu. Parametr poskytuje informace o formátování specifické pro jazykovou verzi. |
| Format(String, ReadOnlySpan<Object>) |
Nahradí položku formátu v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu v zadaném rozsahu. |
| Format(String, Object[]) |
Nahradí položku formátu v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu v zadaném poli. |
| Format(String, Object) |
Nahradí jednu nebo více položek formátu v řetězci řetězcovou reprezentací zadaného objektu. |
| Format(IFormatProvider, String, ReadOnlySpan<Object>) |
Nahradí položky formátu v řetězci řetězcovou reprezentací odpovídajících objektů v zadaném rozsahu. Parametr poskytuje informace o formátování specifické pro jazykovou verzi. |
| Format<TArg0,TArg1,TArg2>(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2) |
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu. |
| Format<TArg0,TArg1>(IFormatProvider, CompositeFormat, TArg0, TArg1) |
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu. |
| Format<TArg0>(IFormatProvider, CompositeFormat, TArg0) |
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu. |
Příklady
Mnoho příkladů, které volají metodu Format, je rozptýleno v tomto článku. Můžete si také stáhnout kompletní sadu String.Format příkladů, které jsou součástí projektu .NET Core pro C#.
Tady jsou některé příklady, které jsou součástí článku:
Vytvoření řetězce formátu
Vložte řetězec
Položka formátu
Formátování položek se stejným indexem
Řízení formátovaného výstupu
Formátování ovládacího prvku
Mezery ovládacích prvků
Zarovnání ovládacího prvku
Řízení počtu integrálních číslic
Určuje počet číslic za oddělovačem desetinných míst.
Zahrnutí složených závorek do výsledného řetězce
Učiňte formátovací řetězce citlivé na kulturní rozdíly
Zajistit, aby formátovací řetězce byly citlivé na kulturní rozdíly
Přizpůsobení operace formátování
Operace vlastního formátování
Poskytovatel interceptů a formátovač římských čísel
Začínáme s metodou String.Format
Použijte String.Format , pokud potřebujete vložit hodnotu objektu, proměnné nebo výrazu do jiného řetězce. Můžete například vložit hodnotu hodnoty Decimal do řetězce a zobrazit ji uživateli jako jeden řetězec:
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.
A formátování této hodnoty můžete řídit takto:
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.
Kromě formátování můžete také řídit zarovnání a mezery.
Vložte řetězec
String.Format začíná formátovacím řetězcem následovaným jedním nebo více objekty nebo výrazy, které budou převedeny na řetězce a vloženy na zadané místo v řetězci formátu. Příklad:
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.'
Řetězec {0} ve formátu obsahuje položku formátu.
0 je index objektu, jehož řetězcová hodnota bude vložena do této pozice. (Indexy začínají na 0.) Pokud objekt, který chcete vložit, není řetězec, jeho ToString metoda je volána k převodu na jeden před vložením do výsledného řetězce.
Tady je další příklad, který používá dvě položky formátu a dva objekty v seznamu objektů:
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.'
V seznamu objektů můžete mít tolik položek formátu a libovolný počet objektů, pokud má index každé položky formátu odpovídající objekt v seznamu objektů. Také se nemusíte starat o to, které volání přetížení použijete; kompilátor za vás vybere to správné.
Formátování ovládacího prvku
Můžete postupovat podle indexu v položce formátu s řetězcem formátu a řídit, jak je objekt formátován. Například {0:d} použije řetězec formátu "d" na první objekt v seznamu objektů. Tady je příklad s jedním objektem a dvěma položkami formátu:
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'
Mnoho typů podporuje formátovací řetězce včetně všech číselných typů ( standardních i vlastních formátových řetězců), všech kalendářních dat a časů ( standardní i vlastní formátovací řetězce) a časových intervalů ( standardní i vlastní formátovací řetězce), všech typů výčtů a identifikátorů GUID. Do vlastních typů můžete také přidat podporu formátových řetězců.
řídit rozestupy
Šířku řetězce, který se vloží do výsledného řetězce, můžete definovat pomocí syntaxe, například {0,12}, která vloží řetězec o 12 znacích. V tomto případě je řetězcová reprezentace prvního objektu zarovnaná doprava ve 12-znakovém poli. (Pokud je řetězcová reprezentace prvního objektu delší než 12 znaků, je však upřednostňovaná šířka pole ignorována a celý řetězec se vloží do výsledného řetězce.)
Následující příklad definuje 6-znakové pole, které bude obsahovat řetězec "rok" a některé řetězce let, stejně jako 15-znakové pole pro uložení řetězce "Population" a některých populačních dat. Upozorňujeme, že znaky jsou v poli zarovnány na pravou stranu.
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
Zarovnání ovládacího prvku
Ve výchozím nastavení jsou řetězce v poli zarovnané doprava, pokud zadáte šířku pole. Pokud chcete v poli zarovnat řetězce doleva, předepíšete šířku pole záporným znaménkem, například {0,-12}, abyste definovali 12 znakové pole zarovnané doleva.
Následující příklad je podobný předchozímu, s tím rozdílem, že zarovná popisky i data doleva.
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 využívá funkci složeného formátování. Další informace naleznete v tématu Složené formátování.
Jakou metodu zavolám?
| Objective | Metoda volání |
|---|---|
| Naformátujte jeden nebo více objektů pomocí konvencí aktuální kultury. | S výjimkou přetížení, která obsahují provider parametr, zbývající Format přetížení zahrnují String parametr následovaný jedním nebo více parametry objektu. Z tohoto důvodu se nemusíte rozhodovat, které přetížení Format chcete zavolat. Kompilátor jazyka vybere odpovídající přetížení z přetížení, která nemají provider parametr na základě seznamu argumentů. Pokud má například seznam argumentů pět argumentů, kompilátor volá metodu Format(String, Object[]) . |
| Naformátujte jeden nebo více objektů pomocí konvencí konkrétní kultury. | Za každým Format přetížením, které začíná parametrem provider , následuje String parametr a jeden nebo více parametrů objektu. Z tohoto důvodu nemusíte určit, které konkrétní Format přetížení hodláte vyvolat. Kompilátor jazyka vybere příslušné přetížení z přetížení, která mají provider parametr na základě seznamu argumentů. Pokud má například seznam argumentů pět argumentů, kompilátor volá metodu Format(IFormatProvider, String, Object[]) . |
| Proveďte vlastní operaci formátování buď s ICustomFormatter implementací, nebo implementací IFormattable . | Jakékoli ze čtyř přetížení s parametrem provider . Kompilátor vybere příslušné přetížení z přetížení, která mají provider parametr na základě seznamu argumentů. |
Stručná metoda Format
Každé přetížení metody Format používá funkci složeného formátování k zahrnutí zástupných symbolů s indexováním od nuly, označovaných jako formátovací položky, do řetězce složeného formátu. Za běhu je každá položka formátu nahrazena řetězcovou reprezentací odpovídajícího argumentu v seznamu parametrů. Pokud je nullhodnota argumentu , položka formátu je nahrazena String.Empty. Například následující volání Format(String, Object, Object, Object) metody obsahuje formátovací řetězec se třemi položkami formátu, {0}, {1}a {2}a seznam argumentů se třemi položkami.
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.
Položka formátu
Položka formátu má tuto syntaxi:
{index[,width][:formatString]}
Závorky označují volitelné prvky. Jsou vyžadovány otevírací a uzavírací složené závorky. (Pokud chcete do formátovacího řetězce zahrnout levou nebo pravou složenou závorku, podívejte se na sekci Escaping Braces v článku Složené formátování.)
Například položka formátu pro formátování hodnoty měny může vypadat takto:
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)
Položka formátu má následující prvky:
index
Index založený na nule argumentu, jehož řetězcové vyjádření má být zahrnuto na této pozici v řetězci. Pokud je nulltento argument , prázdný řetězec bude zahrnut na této pozici v řetězci.
width
Optional. Celé číslo se znaménkem, které označuje celkovou délku pole, do kterého je argument vložen a zda je zarovnaná doprava (kladné celé číslo) nebo zarovnané doleva (záporné celé číslo). Pokud vynecháte width, řetězcová reprezentace odpovídajícího argumentu se vloží do pole bez počátečních nebo koncových mezer.
Pokud je hodnota width menší než délka argumentu, který se má vložit, width je ignorována a délka řetězcového vyjádření argumentu se použije jako šířka pole.
formatString
Optional. Řetězec, který určuje formát výsledného řetězce odpovídajícího argumentu. Pokud vynecháte formatString, je volána odpovídající metoda bez parametrů ToString argumentu k vytvoření řetězcové reprezentace. Pokud zadáte formatString, argument odkazovaný položkou formátu musí implementovat IFormattable rozhraní. Mezi typy podporující formátovací řetězce patří:
Všechna celočíselná a desetinná čísla. (Viz standardní řetězce číselného formátu a vlastní řetězce číselného formátu.)
DateTime a DateTimeOffset. (Viz standardní řetězce formátu data a času a vlastní řetězce formátu data a času.)
Všechny typy výčtů. (Viz formátovací řetězce pro enumeraci.)
TimeSpan hodnoty. (Viz standardní řetězce formátu TimeSpan a vlastní řetězce formátu TimeSpan.)
GUIDy. (Viz Guid.ToString(String) metoda.)
Jakýkoli vlastní typ však může implementovat IFormattable nebo rozšířit implementaci IFormattable existujícího typu.
Následující příklad používá k vytvoření formátovaného výstupu width argumenty a formatString argumenty.
// 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 %
Formátování argumentů
Položky formátu se zpracovávají postupně od začátku řetězce. Každá položka formátu má index, který odpovídá objektu v seznamu argumentů metody. Metoda Format načte argument a odvodí jeho řetězcové vyjádření následujícím způsobem:
- Pokud je
nullargument , metoda vloží String.Empty do výsledného řetězce. Nemusíte se zabývat zpracováním NullReferenceException argumentů s hodnotou null. - Pokud zavoláte přetížení Format(IFormatProvider, String, Object[]) a implementace
providerobjektu IFormatProvider.GetFormat vrátí nenulovou implementaci ICustomFormatter, argument se předá metodě ICustomFormatter.Format(String, Object, IFormatProvider). Pokud položka formátu obsahujeformatStringargument, předá se jako první argument metodě. ICustomFormatter Pokud je implementace k dispozici a vytvoří řetězec, který není null, tento řetězec se vrátí jako řetězcové vyjádření argumentu. V opačném případě se provede další krok. - Pokud argument implementuje rozhraní IFormattable, pak je volána jeho implementace IFormattable.ToString.
- Metoda argumentu bez
ToStringparametrů, která přepíše nebo je zděděná z implementace základní třídy, je volána.
Příkladem, který zachycuje volání metody ICustomFormatter.Format a umožňuje zjistit, jaké informace metoda Format předává formátovací metodě pro každou položku ve složeném formátovacím řetězci, je Příklad: Zprostředkovatel průsečíku a formátování římských čísel.
Další informace naleznete v tématu Zpracování objednávky.
Formátování položek se stejným indexem
Metoda Format vyvolá FormatException výjimku, pokud je index položky indexu větší nebo roven počtu argumentů v seznamu argumentů. Nicméně, format může obsahovat více položek formátu, než je počet argumentů, pokud mají více položek formátu stejný index. Ve volání Format(String, Object) metody v následujícím příkladu má seznam argumentů jeden argument, ale formátovací řetězec obsahuje dvě položky formátu: jedna zobrazuje desetinnou hodnotu čísla a druhá zobrazuje jeho šestnáctkovou hodnotu.
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
Formát a kultura
Obecně platí, že objekty v seznamu argumentů jsou převedeny na řetězcové reprezentace pomocí zásad aktuální kultury, která je vrácena CultureInfo.CurrentCulture vlastností. Toto chování můžete řídit voláním jedné z verzí Format, která zahrnuje parametr provider. Parametr provider je IFormatProvider implementace, která poskytuje vlastní a kulturně specifické informace o formátování, jež se používají k řízení procesu formátování.
Rozhraní IFormatProvider má jeden člen , GetFormatkterý je zodpovědný za vrácení objektu, který poskytuje informace o formátování. .NET má tři IFormatProvider implementace, které poskytují formátování specifické pro kulturu:
- CultureInfo. Jeho GetFormat metoda vrátí objekt specifický pro NumberFormatInfo jazykovou verzi pro formátování číselných hodnot a objekt specifický pro DateTimeFormatInfo jazykovou verzi pro formátování hodnot data a času.
- DateTimeFormatInfo, který se používá pro kulturně specifické formátování hodnot data a času. Metoda GetFormat vrací sama sebe.
- NumberFormatInfo, který se používá pro formátování číselné hodnoty specifické pro kulturní kontext. Metoda GetFormat(Type) vrací sama sebe.
Vlastní operace formátování
Můžete také zavolat kterékoliv z přetížení metody Format, které mají parametr provider typu IFormatProvider, abyste mohli provádět vlastní operace formátování. Můžete například naformátovat celé číslo jako identifikační číslo nebo jako telefonní číslo. Pokud chcete provést vlastní formátování, musí váš argument provider implementovat rozhraní IFormatProvider i ICustomFormatter. Pokud je metodě předána implementace Format jako argument ICustomFormatter, metoda provider volá svou implementaci Format a požaduje objekt typu IFormatProvider.GetFormat. Pak volá metodu vráceného objektu ICustomFormatterFormat k naformátování každé položky formátu ve složeném řetězci, který byl předán do něj.
Další informace o poskytování vlastních řešení formátování naleznete v tématu Postupy: Definování a použití vlastních zprostředkovatelů číselného formátu a ICustomFormatter. Příklad, který převede celá čísla na formátovaná vlastní čísla, viz Příklad: Vlastní operace formátování. Příklad, který převádí neznačené bajty na římské číslice, viz Příklad: Zprostředkovatel zachytávání a formátovač římských číslic.
Příklad: Vlastní operace formátování
Tento příklad definuje zprostředkovatele formátu, který formátuje celočíselnou hodnotu jako číslo účtu zákazníka ve formátu 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.
Příklad: Zprostředkovatel zachytávání a formátovač římských čísel
Tento příklad definuje vlastního poskytovatele formátu, který implementuje rozhraní ICustomFormatter a IFormatProvider pro provedení dvou věcí:
- Zobrazí parametry předané jeho ICustomFormatter.Format implementaci. To nám umožňuje zjistit, jaké parametry Format(IFormatProvider, String, Object[]) metoda předává implementaci vlastního formátování pro každý objekt, který se pokouší formátovat. To může být užitečné při ladění aplikace.
- Pokud objekt, který má být formátován, je nepodepsaná bajtová hodnota, která má být formátována pomocí standardního formátovacího řetězce "R", vlastní formátovací modul formátuje číselnou hodnotu jako římské číslice.
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
časté otázky
Proč doporučíte interpolaci řetězců při volání metody String.Format ?
Interpolace řetězců je:
- Flexibilnější. Lze jej použít v libovolném řetězci bez nutnosti volání metody, která podporuje složené formátování. Jinak musíte volat metodu Format nebo jinou metodu, která podporuje složené formátování, například Console.WriteLine nebo StringBuilder.AppendFormat.
- Čitelnější. Vzhledem k tomu, že výraz, který se má vložit do řetězce, se zobrazí v interpolovaném výrazu místo v seznamu argumentů, interpolované řetězce se snadněji kódují a čtou. Interpolované řetězce lze také použít v operacích zřetězení řetězců k vytvoření stručnějšího a jasnějšího kódu.
Porovnání následujících dvou příkladů kódu znázorňuje nadřazenost interpolovaných řetězců nad zřetězením řetězců a voláním složených metod formátování. Použití více operací zřetězení řetězců v následujícím příkladu vytváří rozvleklý a těžko čitelný kód.
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.
Naproti tomu použití interpolovaných řetězců v následujícím příkladu vytváří mnohem jasnější, stručnější kód než řetězcový příkaz zřetězení a volání Format metody v předchozím příkladu.
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.
Kde najdu předdefinované formátovací řetězce?
- Pro všechny celočíselné typy a typy s plovoucí desetinnou čárkou se podívejte na standardní řetězce číselného formátu a vlastní řetězce číselného formátu.
- Hodnoty data a času najdete v tématu Standardní řetězce formátu data a času a vlastní řetězce formátu data a času.
- Hodnoty výčtu naleznete v tématu Výčtové formátovací řetězce.
- Hodnoty TimeSpan najdete v tématu Standardní řetězce formátu TimeSpan a vlastní řetězce formátu TimeSpan.
- Hodnoty Guid najdete v části Poznámky na Guid.ToString(String) stránce odkazu.
Jak můžu řídit zarovnání výsledných řetězců, které nahrazují položky formátování?
Obecná syntaxe položky formátu je:
{index[,width][: formatString]}
width je celé číslo, které definuje šířku pole. Pokud je tato hodnota záporná, text v poli je zarovnaný doleva. Pokud je text kladný, text je zarovnaný doprava.
Jak můžu určit počet číslic za oddělovačem desetinných míst?
Všechny standardní řetězce číselného formátu kromě " D" (které se používají pouze s celými čísly), "G", "R" a "X" umožňují specifikátor přesnosti, který definuje počet desetinných číslic ve výsledném řetězci. Následující příklad používá standardní číselné formátovací řetězce k řízení počtu desetinných číslic ve výsledném řetězci.
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 %
Pokud používáte vlastní řetězec číselného formátu, použijte specifikátor formátu "0" k řízení počtu desetinných číslic ve výsledném řetězci, jak ukazuje následující příklad.
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
Jak můžu řídit počet integrálních číslic?
Ve výchozím nastavení operace formátování zobrazují pouze nenulové celočíselné číslice. Pokud formátujete celá čísla, můžete k řízení počtu číslic použít specifikátor přesnosti s řetězci standardního formátu "D" a "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
Můžete vypsat celé číslo nebo číslo s plovoucí desetinnou čárkou s úvodními nulami a vytvořit výsledný řetězec se zadaným počtem integrálních číslic pomocí specifikátoru vlastního číselného formátu "0", jak ukazuje následující příklad.
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
Kolik položek můžu zahrnout do seznamu formátů?
Neexistuje žádný praktický limit. Druhý parametr Format(IFormatProvider, String, Object[]) metody je označen atributem ParamArrayAttribute , který umožňuje zahrnout jako seznam formátů buď seznam s oddělovači, nebo pole objektů.
Jak do výsledného řetězce zahrnu literály ("{" a "}")?
Jak například zabráníte tomu, aby volání následující metody vyvolalo FormatException výjimku?
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)
Jedna levá nebo pravá složená závorka se vždy interpretuje jako začátek nebo konec položky formátu. Aby bylo možné interpretovat doslova, musí být utekl. Unikáte složené závorce tím, že přidáte další složenou závorku (například "{{" a "}}" místo "{" a "}"), jak je uvedeno v následujícím volání metody:
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)
I tak jsou i zástupné znaky složené závorky snadno chybně interpretovány. Doporučujeme zahrnout do seznamu formátů závorky a vkládat je do výsledného řetězce pomocí formátovacích položek, jak ukazuje následující příklad.
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, "}")
Proč volání metody String.Format vyvolá výjimku FormatException?
Nejběžnější příčinou výjimky je, že index položky formátu neodpovídá objektu v seznamu formátů. Obvykle to znamená, že jste chybně očíslovali indexy formátovaných položek nebo jste zapomněli zahrnout objekt do seznamu formátů. Pokus o zahrnutí neoznačeného levého nebo pravého znaku složené závorky také vyvolá chybu FormatException. Občas je výjimka výsledkem překlepu; typickou chybou je například chybné napsání "[" (levá hranatá závorka) místo "{" (levá složená závorka).
Pokud metoda Format(System.IFormatProvider,System.String;System.Object[]) podporuje pole parametrů, proč můj kód vyvolá výjimku při použití pole?
Například následující kód vyvolá FormatException výjimku:
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
Jedná se o problém řešení přetížení kompilátoru. Vzhledem k tomu, že kompilátor nemůže převést pole celých čísel na pole objektu, považuje celočíselné pole za jediný argument, takže volá metodu Format(String, Object) . Výjimka je vyvoláná, protože existují čtyři položky formátu, ale pouze jedna položka v seznamu formátů.
Vzhledem k tomu, že jazyk Visual Basic ani C# nemůže převést celočíselné pole na pole objektů, je nutné provést převod sami před voláním Format(String, Object[]) metody. Následující příklad obsahuje jednu implementaci.
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
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Format(IFormatProvider, String, Object, Object, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací tří zadaných objektů. Parametr poskytuje informace o formátování specifické pro jazykovou verzi.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- String
- arg0
- Object
První objekt, který se má formátovat.
- arg1
- Object
Druhý objekt, který se má formátovat.
- arg2
- Object
Třetí objekt, který se má formátovat.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovými arg0reprezentacemi , arg1a arg2.
Výjimky
format je null.
format je neplatný.
nebo
Index položky formátu je menší než nula nebo větší než dvě.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu tří výrazů na jejich řetězcové reprezentace a k vložení těchto reprezentací do řetězce. Při převodu používá metoda formátování citlivé na jazykovou verzi nebo vlastní formátovací modul. Metoda převede každý Object argument na jeho řetězcové vyjádření voláním ToString(IFormatProvider) metoda, nebo, pokud odpovídající formát položka objektu obsahuje formát řetězec, voláním toString(String,IFormatProvider) metoda. Pokud tyto metody neexistují, volá metodu ToString bez parametrů objektu.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete volat metodu s objektem, který poskytuje jazykové verze nebo vlastní formátování a řetězec složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Platí pro
Format(IFormatProvider, String, Object, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací dvou zadaných objektů. Parametr poskytuje informace o formátování specifické pro jazykovou verzi.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- String
- arg0
- Object
První objekt, který se má formátovat.
- arg1
- Object
Druhý objekt, který se má formátovat.
Návraty
Kopie format , ve které jsou položky formátu nahrazeny řetězcovými reprezentacemi arg0 a arg1.
Výjimky
format je null.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu dvou výrazů na jejich řetězcové reprezentace a k vložení těchto reprezentací do řetězce. Při převodu používá metoda formátování citlivé na jazykovou verzi nebo vlastní formátovací modul. Metoda převede každý Object argument na jeho řetězcové vyjádření voláním ToString(IFormatProvider) metoda, nebo, pokud odpovídající formát položka objektu obsahuje formát řetězec, voláním toString(String,IFormatProvider) metoda. Pokud tyto metody neexistují, volá metodu ToString bez parametrů objektu.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete volat metodu s objektem, který poskytuje jazykové verze nebo vlastní formátování a řetězec složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Platí pro
Format(String, Object, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací dvou zadaných objektů.
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
Parametry
- format
- String
- arg0
- Object
První objekt, který se má formátovat.
- arg1
- Object
Druhý objekt, který se má formátovat.
Návraty
Kopie format , ve které jsou položky formátu nahrazeny řetězcovými reprezentacemi arg0 a arg1.
Výjimky
format je null.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu hodnoty dvou výrazů na jejich řetězcové reprezentace a k vložení těchto reprezentací do řetězce.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete metodu volat s řetězcem složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Příklad: Formátování dvou argumentů
Tento příklad používá metodu Format(String, Object, Object) k zobrazení dat o čase a teplotě uložených v obecném Dictionary<TKey,TValue> objektu. Všimněte si, že formátovací řetězec má tři položky formátu, i když existují pouze dva objekty k formátování. Důvodem je to, že první objekt v seznamu (hodnota data a času) je používán dvěma položkami formátu: První položka formátu zobrazuje čas a druhý zobrazuje datum.
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
Viz také
- Typy formátování v .NET
- Složené formátování
- Řetězce standardního formátu data a času
- Řetězce vlastního formátu data a času
- Standardní řetězce pro formátování čísel
- Vlastní řetězce číselného formátu
- Standardní řetězce formátu TimeSpan
- Vlastní řetězce formátu TimeSpan
- Řetězce formátování výčtů
Platí pro
Format(IFormatProvider, CompositeFormat, ReadOnlySpan<Object>)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- CompositeFormat
Nějaké CompositeFormat.
- args
- ReadOnlySpan<Object>
Rozsah objektů, které chcete formátovat.
Návraty
Formátovaný řetězec.
Výjimky
format je null.
Index položky formátu je větší nebo roven počtu zadaných argumentů.
Platí pro
Format(IFormatProvider, CompositeFormat, Object[])
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- CompositeFormat
Nějaké CompositeFormat.
- args
- Object[]
Pole objektů, které chcete formátovat.
Návraty
Formátovaný řetězec.
Výjimky
format nebo args je null.
Index položky formátu je větší nebo roven počtu zadaných argumentů.
Platí pro
Format(String, Object, Object, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací tří zadaných objektů.
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
Parametry
- format
- String
- arg0
- Object
První objekt, který se má formátovat.
- arg1
- Object
Druhý objekt, který se má formátovat.
- arg2
- Object
Třetí objekt, který se má formátovat.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovými arg0reprezentacemi , arg1a arg2.
Výjimky
format je null.
format je neplatný.
nebo
Index položky formátu je menší než nula nebo větší než dvě.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu hodnoty tří výrazů na jejich řetězcové reprezentace a k vložení těchto reprezentací do řetězce.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete metodu volat s řetězcem složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Příklad: Formátování tří argumentů
Tento příklad používá metodu Format(String, Object, Object, Object) k vytvoření řetězce, který znázorňuje výsledek logické And operace se dvěma celočíselnou hodnotou. Všimněte si, že formátovací řetězec obsahuje šest položek formátu, ale metoda má pouze tři položky v seznamu parametrů, protože každá položka je formátována dvěma různými způsoby.
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)
Viz také
Platí pro
Format(IFormatProvider, String, Object[])
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací odpovídajících objektů v zadaném poli. Parametr poskytuje informace o formátování specifické pro jazykovou verzi.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- String
- args
- Object[]
Pole objektů, které obsahuje nula nebo více objektů pro formátování.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovou reprezentací odpovídajících objektů v args.
Výjimky
format nebo args je null.
format je neplatný.
nebo
Index položky formátu je menší než nula nebo je větší nebo roven délce args pole.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu čtyř nebo více výrazů na jejich řetězcové reprezentace a k vložení těchto reprezentací do řetězce. Při převodu používá metoda formátování citlivé na jazykovou verzi nebo vlastní formátovací modul. Metoda převede každý Object argument na jeho řetězcové vyjádření voláním ToString(IFormatProvider) metoda, nebo, pokud odpovídající formát položka objektu obsahuje formát řetězec, voláním toString(String,IFormatProvider) metoda. Pokud tyto metody neexistují, volá metodu ToString bez parametrů objektu.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete volat metodu s objektem, který poskytuje jazykové verze nebo vlastní formátování a řetězec složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Příklad: Formátování citlivé na jazykovou verzi
Tento příklad používá metodu Format(IFormatProvider, String, Object[]) k zobrazení řetězcové reprezentace některých hodnot data a času a číselných hodnot pomocí několika různých jazykových verzí.
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
Viz také
- DateTimeFormatInfo
- ICustomFormatter
- IFormatProvider
- NumberFormatInfo
- Typy formátování v .NET
- Složené formátování
- Řetězce standardního formátu data a času
- Řetězce vlastního formátu data a času
- Standardní řetězce pro formátování čísel
- Vlastní řetězce číselného formátu
- Standardní řetězce formátu TimeSpan
- Vlastní řetězce formátu TimeSpan
- Řetězce formátování výčtů
Platí pro
Format(IFormatProvider, String, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu. Parametr poskytuje informace o formátování specifické pro jazykovou verzi.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- String
- arg0
- Object
Objekt, který se má formátovat.
Návraty
Kopie format , ve které byla položka formátu nebo položky nahrazena řetězcovou reprezentací arg0.
Výjimky
format je null.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu hodnoty výrazu na řetězcové vyjádření a k vložení této reprezentace do řetězce. Při převodu používá metoda formátování citlivé na jazykovou verzi nebo vlastní formátovací modul. Metoda převede arg0 na řetězcovou reprezentaci voláním toString(IFormatProvider) metoda, nebo, pokud odpovídající formát položka objektu obsahuje formát řetězec, voláním toString(String,IFormatProvider) metoda. Pokud tyto metody neexistují, volá metodu ToString bez parametrů objektu.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete volat metodu s objektem, který poskytuje jazykové verze nebo vlastní formátování a řetězec složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Platí pro
Format(String, ReadOnlySpan<Object>)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu v zadaném rozsahu.
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
Parametry
- format
- String
- args
- ReadOnlySpan<Object>
Rozsah objektu, který obsahuje nula nebo více objektů k formátování.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovou reprezentací odpovídajících objektů v args.
Platí pro
Format(String, Object[])
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu v zadaném řetězci řetězcovou reprezentací odpovídajícího objektu v zadaném poli.
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
Parametry
- format
- String
- args
- Object[]
Pole objektů, které obsahuje nula nebo více objektů pro formátování.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovou reprezentací odpovídajících objektů v args.
Výjimky
format nebo args je null.
format je neplatný.
nebo
Index položky formátu je menší než nula nebo je větší nebo roven délce args pole.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu hodnoty čtyř nebo více výrazů na řetězcové reprezentace a k vložení těchto reprezentací do řetězce. Vzhledem k tomu, že args parametr je označen atributem System.ParamArrayAttribute , můžete předat objekty metodě jako jednotlivé argumenty nebo jako Object pole.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete metodu volat s řetězcem složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Příklad: Formátování více než tří argumentů
Tento příklad vytvoří řetězec, který obsahuje data o vysoké a nízké teplotě v určitém datu. Složený řetězec formátu obsahuje pět položek formátu v příkladu jazyka C# a šest v příkladu jazyka Visual Basic. Dvě položky formátu definují šířku řetězcového vyjádření odpovídající hodnoty a první položka formátu obsahuje také standardní řetězec formátu data a času.
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)
Objekty, které se mají formátovat, můžete také předat jako pole, nikoli jako seznam argumentů.
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
Viz také
- Typy formátování v .NET
- Složené formátování
- Řetězce standardního formátu data a času
- Řetězce vlastního formátu data a času
- Standardní řetězce pro formátování čísel
- Vlastní řetězce číselného formátu
- Standardní řetězce formátu TimeSpan
- Vlastní řetězce formátu TimeSpan
- Řetězce formátování výčtů
Platí pro
Format(String, Object)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí jednu nebo více položek formátu v řetězci řetězcovou reprezentací zadaného objektu.
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
Parametry
- format
- String
- arg0
- Object
Objekt, který se má formátovat.
Návraty
Kopie format , ve které jsou všechny položky formátu nahrazeny řetězcovou reprezentací arg0.
Výjimky
format je null.
Poznámky
Important
Místo volání metody String.Format nebo použití složených formátových řetězců můžete použít interpolované řetězce , pokud je jazyk podporuje. Interpolovaný řetězec je řetězec, který obsahuje interpolované výrazy. Každý interpolovaný výraz se vyhodnotí jako jeho hodnota a je zahrnut do výsledného řetězce, když je řetězec přiřazen. Další informace naleznete v tématu Interpolace řetězců (Referenční dokumentace jazyka C#) a Interpolované řetězce (Referenční dokumentace jazyka Visual Basic).
Tato metoda používá funkci složeného formátování k převodu hodnoty výrazu na řetězcové vyjádření a k vložení této reprezentace do řetězce.
Při volání String.Format metody však není nutné zaměřit se na konkrétní přetížení, které chcete volat. Místo toho můžete metodu volat s řetězcem složeného formátu , který obsahuje jednu nebo více položek formátu. Každému formátu položky přiřadíte číselný index; první index začíná na 0. Kromě počátečního řetězce by volání metody mělo mít tolik dalších argumentů, kolik má hodnoty indexu. Například řetězec, jehož formát položky mají indexy 0 a 1 by měly mít 2 argumenty; jeden s indexy 0 až 5 by měl mít 6 argumentů. Kompilátor jazyka pak přeloží volání metody na konkrétní přetížení String.Format metody.
Podrobnější dokumentaci k použití String.Format metody najdete v tématu Začínáme s metodou String.Format a Kterou metodu volám?.
Příklad: Formátování jednoho argumentu
Následující příklad používá metodu Format(String, Object) pro vložení věku jednotlivce doprostřed řetězce.
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.
Viz také
- Typy formátování v .NET
- Složené formátování
- Řetězce standardního formátu data a času
- Řetězce vlastního formátu data a času
- Standardní řetězce pro formátování čísel
- Vlastní řetězce číselného formátu
- Standardní řetězce formátu TimeSpan
- Vlastní řetězce formátu TimeSpan
- Řetězce formátování výčtů
Platí pro
Format(IFormatProvider, String, ReadOnlySpan<Object>)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položky formátu v řetězci řetězcovou reprezentací odpovídajících objektů v zadaném rozsahu. Parametr poskytuje informace o formátování specifické pro jazykovou verzi.
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
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- String
- args
- ReadOnlySpan<Object>
Rozsah objektu, který obsahuje nula nebo více objektů k formátování.
Návraty
Kopie format , ve které byly položky formátu nahrazeny řetězcovou reprezentací odpovídajících objektů v args.
Platí pro
Format<TArg0,TArg1,TArg2>(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu.
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
Parametry typu
- TArg0
Typ prvního objektu, který se má formátovat.
- TArg1
Typ druhého objektu, který se má formátovat.
- TArg2
Typ třetího objektu, který se má formátovat.
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- CompositeFormat
Nějaké CompositeFormat.
- arg0
- TArg0
První objekt, který se má formátovat.
- arg1
- TArg1
Druhý objekt, který se má formátovat.
- arg2
- TArg2
Třetí objekt, který se má formátovat.
Návraty
Formátovaný řetězec.
Výjimky
format je null.
Index položky formátu je větší nebo roven počtu zadaných argumentů.
Platí pro
Format<TArg0,TArg1>(IFormatProvider, CompositeFormat, TArg0, TArg1)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu.
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
Parametry typu
- TArg0
Typ prvního objektu, který se má formátovat.
- TArg1
Typ druhého objektu, který se má formátovat.
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- CompositeFormat
Nějaké CompositeFormat.
- arg0
- TArg0
První objekt, který se má formátovat.
- arg1
- TArg1
Druhý objekt, který se má formátovat.
Návraty
Formátovaný řetězec.
Výjimky
format je null.
Index položky formátu je větší nebo roven počtu zadaných argumentů.
Platí pro
Format<TArg0>(IFormatProvider, CompositeFormat, TArg0)
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
- Zdroj:
- String.Manipulation.cs
Nahradí položku formátu nebo položky v řetězcové CompositeFormat reprezentaci odpovídajících objektů v zadaném formátu.
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
Parametry typu
- TArg0
Typ prvního objektu, který se má formátovat.
Parametry
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi.
- format
- CompositeFormat
Nějaké CompositeFormat.
- arg0
- TArg0
První objekt, který se má formátovat.
Návraty
Formátovaný řetězec.
Výjimky
format je null.
Index položky formátu je větší nebo roven počtu zadaných argumentů.