Összetett formázás
A .NET összetett formázási funkciója bemenetként egy objektumlistát és egy összetett formázási sztringet használ. Az összetett formázási sztringek olyan rögzített szövegből állnak, amely indexelt helyőrzőkkel, úgynevezett formátumelemekkel van elegyítve. Ezek a formátumelemek a listában szereplő objektumoknak felelnek meg. A formázási művelet olyan eredménysztringet eredményez, amely az eredeti rögzített szövegből áll, amely a lista objektumainak sztringképével van elegyítve.
Fontos
Összetett formátumú sztringek használata helyett interpolált sztringeket is használhat, ha az ön által használt nyelv és annak verziója támogatja őket. Az interpolált sztringek interpolált kifejezéseket tartalmaznak. Minden interpolált kifejezés feloldva van a kifejezés értékével, és a sztring hozzárendelésekor az eredménysztring része lesz. További információ: Sztring interpoláció (C# referencia) és interpolált sztringek (Visual Basic Reference).
A következő metódusok támogatják az összetett formázási funkciót:
- String.Format, amely formázott eredménysztringet ad vissza.
- StringBuilder.AppendFormat, amely egy formázott eredménysztringet fűz egy StringBuilder objektumhoz.
- A metódus néhány túlterhelése Console.WriteLine , amely formázott eredménysztringet jelenít meg a konzolon.
- A metódus néhány túlterhelése TextWriter.WriteLine , amelyek a formázott eredménysztringet egy streambe vagy fájlba írják. Az olyan osztályok TextWriter, mint például StreamWriter és HtmlTextWriter, szintén megosztják ezt a funkciót.
- Debug.WriteLine(String, Object[]), amely formázott üzenetet ad ki a nyomkövetési figyelőknek.
- A Trace.TraceError(String, Object[]), Trace.TraceInformation(String, Object[])és Trace.TraceWarning(String, Object[]) metódusok, amelyek a figyelőknek formázott üzeneteket adnak ki.
- Ez a TraceSource.TraceInformation(String, Object[]) metódus, amely egy információs metódust ír a figyelők nyomon követéséhez.
Összetett formázási sztring
Az összetett formázási funkciót támogató metódusok argumentumai egy összetett formátumú sztring és objektumlista. Az összetett formázási sztringek nulla vagy több rögzített szövegfuttatásból állnak, amelyek egy vagy több formázási elemhez kapcsolódnak. A rögzített szöveg tetszőleges tetszőleges sztring, és minden formázási elem egy objektumnak vagy egy dobozos szerkezetnek felel meg a listában. Az egyes objektumok sztringábrázolása a megfelelő formátumelemet helyettesíti.
Vegye figyelembe a következő Format kódrészletet:
string.Format("Name = {0}, hours = {1:hh}", "Fred", DateTime.Now);
String.Format("Name = {0}, hours = {1:hh}", "Fred", DateTime.Now)
A rögzített szöveg és , hours =
a Name =
. A formátumelemek azok {0}
, amelyek 0 indexe az objektumnak name
felel meg, és {1:hh}
amelyek 1 indexe az objektumnak DateTime.Now
felel meg.
Elem szintaxisának formázása
Minden formázási elem a következő űrlapot veszi fel, és a következő összetevőkből áll:
{index[,alignment][:formatString]}
A megfelelő kapcsos zárójelek ({
és }
) megadása kötelező.
Index összetevő
A kötelező indexösszetevő , amelyet paraméterkijelölőnek is neveznek, egy 0-tól kezdődő szám, amely azonosítja az objektumok listájában szereplő megfelelő elemet. Vagyis az a formátumelem, amelynek paraméter-megadója 0
a lista első objektumának formázása. Az a formátumelem, amelynek paraméterkijelölője 1
a második objektumot formázza a listában, és így tovább. Az alábbi példában négy, nullától háromig számozott paraméter-meghatározó szerepel, amelyek 10-nél kisebb prímszámokat jelölnek:
string.Format("Name = {0}, hours = {1:hh}", "Fred", DateTime.Now);
String.Format("Name = {0}, hours = {1:hh}", "Fred", DateTime.Now)
Több formátumelem is hivatkozhat ugyanarra az elemre az objektumok listájában ugyanazzal a paraméterkijelölővel. Ugyanazt a számértéket például hexadecimális, tudományos és számformátumban is formázhatja egy összetett formátumú sztring megadásával, például "0x{0:X} {0:E} {0:N}"
az alábbi példában látható módon:
string multiple = string.Format("0x{0:X} {0:E} {0:N}",
Int64.MaxValue);
Console.WriteLine(multiple);
// The example displays the following output:
// 0x7FFFFFFFFFFFFFFF 9.223372E+018 9,223,372,036,854,775,807.00
Dim multiple As String = String.Format("0x{0:X} {0:E} {0:N}",
Int64.MaxValue)
Console.WriteLine(multiple)
'The example displays the following output
' 0x7FFFFFFFFFFFFFFF 9.223372E+018 9,223,372,036,854,775,807.00
Minden formázási elem hivatkozhat a lista bármely objektumára. Ha például három objektum van, formázhatja a második, az első és a harmadik objektumot egy összetett formázási sztring, például {1} {0} {2}
a . A formátumelem által nem hivatkozott objektumok figyelmen kívül lesznek hagyva. Az A FormatException parancs futásidőben lesz eldobva, ha egy paraméter-meghatározó az objektumok listájának határain kívül eső elemet jelöl ki.
Igazítási összetevő
Az opcionális igazítási összetevő egy aláírt egész szám, amely az előnyben részesített formázott mezőszélességre utal. Ha az igazítás értéke kisebb, mint a formázott sztring hossza, a program figyelmen kívül hagyja az igazítást, és a formázott sztring hosszát használja a mezőszélességként. A mezőben a formázott adatok jobbra vannak igazítva, ha az igazítás pozitív, és balról igazított, ha az igazítás negatív. Ha paddingra van szükség, a rendszer fehér területet használ. Ha az igazítás meg van adva, vesszőre van szükség.
Az alábbi példa két tömböt határoz meg, az egyik az alkalmazottak nevét tartalmazza, a másik pedig a két hét alatt ledolgozott órákat tartalmazza. Az összetett formátum sztringje balra igazítja a neveket egy 20 karakteres mezőben, és jobbra igazítja az óráikat egy 5 karakteres mezőben. Az "N1" standard formátumú sztring az órákat egy tört számjegygel formázza.
string[] names = { "Adam", "Bridgette", "Carla", "Daniel",
"Ebenezer", "Francine", "George" };
decimal[] hours = { 40, 6.667m, 40.39m, 82,
40.333m, 80, 16.75m };
Console.WriteLine("{0,-20} {1,5}\n", "Name", "Hours");
for (int counter = 0; counter < names.Length; counter++)
Console.WriteLine("{0,-20} {1,5:N1}", names[counter], hours[counter]);
// The example displays the following output:
// Name Hours
//
// Adam 40.0
// Bridgette 6.7
// Carla 40.4
// Daniel 82.0
// Ebenezer 40.3
// Francine 80.0
// George 16.8
Dim names As String() = {"Adam", "Bridgette", "Carla", "Daniel",
"Ebenezer", "Francine", "George"}
Dim hours As Decimal() = {40, 6.667D, 40.39D, 82,
40.333D, 80, 16.75D}
Console.WriteLine("{0,-20} {1,5}\n", "Name", "Hours")
For counter = 0 To names.Length - 1
Console.WriteLine("{0,-20} {1,5:N1}", names(counter), hours(counter))
Next
'The example displays the following output
' Name Hours
'
' Adam 40.0
' Bridgette 6.7
' Carla 40.4
' Daniel 82.0
' Ebenezer 40.3
' Francine 80.0
' George 16.8
Sztringösszetevő formázása
Az opcionális formatString összetevő egy formátumsztring, amely megfelel a formázott objektum típusának. Megadhatja a következőket:
- Standard vagy egyéni numerikus formátumú sztring, ha a megfelelő objektum numerikus érték.
- Standard vagy egyéni dátum- és időformátum-sztring, ha a megfelelő objektum objektum DateTime .
- Enumerálási formátum sztringje , ha a megfelelő objektum enumerálási érték.
Ha a formatString nincs megadva, a függvény numerikus, dátum- és idő- vagy enumerálási típus általános ("G") formátumkijelölőt használ. A formatString megadása esetén a kettőspont megadása kötelező.
Az alábbi táblázat a .NET-osztálytár olyan típusait vagy kategóriáit sorolja fel, amelyek támogatják az előre definiált formázási sztringeket, és hivatkozásokat tartalmaz a támogatott formázási sztringeket listázó cikkekre. A sztringformázás egy bővíthető mechanizmus, amely lehetővé teszi az új formázási sztringek definiálását az összes meglévő típushoz, valamint az alkalmazás által definiált típus által támogatott formátumsztringek készletét.
További információkért tekintse meg a cikkeket és ICustomFormatter a IFormattable felületi cikkeket.
Típus- vagy típuskategória | Lásd: |
---|---|
Dátum- és időtípusok (DateTime, DateTimeOffset) | Szabványos dátum- és időformátum-karakterláncok Egyéni dátum- és időformátum-karakterláncok |
Enumerálási típusok (az összes származtatási System.Enumtípus) | Sztringek számbavétele |
Numerikus típusok (BigInteger, Byte, Decimal, Double, Int16, Int32, Int64SByte, SingleUInt16, UInt32, ) UInt64 | Standard numerikus formázó sztringek Egyéni numerikus formázási sztringek |
Guid | Guid.ToString(String) |
TimeSpan | Standard TimeSpan Formátum sztringek Egyéni TimeSpan formátumsztringek |
Kapcsos zárójelek menekülése
A nyitó és záró kapcsos zárójelek formátumelem kezdő és záró elemként vannak értelmezve. A konstans nyitó vagy záró kapcsos zárójel megjelenítéséhez menekülési sorozatot kell használnia. Adjon meg két nyitó zárójelet ({{
) a rögzített szövegben egy nyitó zárójel ({
) megjelenítéséhez, vagy két záró zárójelet (}}
) egy záró zárójel (}
) megjelenítéséhez.
A formázó elemhez tartozó kapcsos zárójelek a .NET és a .NET-keretrendszer között eltérően vannak elemezve.
.NET
A kapcsos zárójelek egy formátumelem körül is megmenekülhetnek. Vegyük például a formátumelemet {{{0:D}}}
, amely egy nyitó zárójelet, egy decimális számként formázott numerikus értéket és egy záró zárójelet jelenít meg. A formátumelem értelmezése a következő módon történik:
- Az első két nyitó kapcsos zárójel (
{{
) megmenekül, és egy nyitó kapcsos zárójelet ad. - A következő három karakter (
{0:
) formátumelem kezdeteként lesz értelmezve. - A következő karakter (
D
) a Decimális standard numerikus formátumkijelölőjeként lesz értelmezve. - A következő zárójel (
}
) a formátumelem végeként lesz értelmezve. - Az utolsó két záró kapcsos zárójel megmenekül, és egy záró kapcsos zárójelet ad.
- A megjelenített végeredmény a literális sztring.
{6324}
int value = 6324;
string output = string.Format("{{{0:D}}}", value);
Console.WriteLine(output);
// The example displays the following output:
// {6324}
Dim value As Integer = 6324
Dim output As String = String.Format("{{{0:D}}}", value)
Console.WriteLine(output)
'The example displays the following output
' {6324}
.NET-keretrendszer
A formátumelemek kapcsos zárójelei egymás után, a talált sorrendben lesznek értelmezve. A beágyazott zárójelek értelmezése nem támogatott.
A megmenekült kapcsos zárójelek értelmezése váratlan eredményekhez vezethet. Vegyük például a formátumelemet {{{0:D}}}
, amely egy nyitó zárójelet, egy decimális számként formázott numerikus értéket és egy záró zárójelet jelenít meg. A formátumelem azonban a következő módon lesz értelmezve:
- Az első két nyitó kapcsos zárójel (
{{
) megmenekül, és egy nyitó kapcsos zárójelet ad. - A következő három karakter (
{0:
) formátumelem kezdeteként lesz értelmezve. - A következő karakter (
D
) a Decimális standard numerikus formátumválasztóként lesz értelmezve, de a következő két kapcsos zárójel (}}
) egyetlen kapcsos zárójelet eredményez. Mivel az eredményül kapott sztring (D}
) nem szabványos numerikus formátumkijelölő, az eredményül kapott sztringet egyéni formátumsztringként értelmezi a rendszer, amely a literális sztringD}
megjelenítését jelenti. - Az utolsó kapcsos zárójel (
}
) a formátumelem végeként lesz értelmezve. - A megjelenített végeredmény a literális sztring.
{D}
A formázandó numerikus érték nem jelenik meg.
int value = 6324;
string output = string.Format("{{{0:D}}}",
value);
Console.WriteLine(output);
// The example displays the following output:
// {D}
Dim value As Integer = 6324
Dim output As String = String.Format("{{{0:D}}}",
value)
Console.WriteLine(output)
'The example displays the following output:
' {D}
A kód írásának egyik módja, hogy elkerülje a megmenekült kapcsos zárójelek félreértelmezését és az elemek formázását, ha külön formázza a kapcsos zárójeleket és az elemeket. Ez azt jelzi, hogy az első formátumműveletben egy konstans nyitó zárójel jelenik meg. A következő műveletben jelenítse meg a formátumelem eredményét, majd a végső műveletben megjelenítsen egy konstans záró zárójelet. Az alábbi példa a következő megközelítést szemlélteti:
int value = 6324;
string output = string.Format("{0}{1:D}{2}",
"{", value, "}");
Console.WriteLine(output);
// The example displays the following output:
// {6324}
Dim value As Integer = 6324
Dim output As String = String.Format("{0}{1:D}{2}",
"{", value, "}")
Console.WriteLine(output)
'The example displays the following output:
' {6324}
Megrendelés feldolgozása
Ha az összetett formázási metódus hívása olyan argumentumot tartalmaz IFormatProvider , amelynek értéke nem null
, a futtatókörnyezet meghívja a metódust IFormatProvider.GetFormat , hogy implementációt ICustomFormatter kérjen. Ha a metódus visszaad egy implementációt ICustomFormatter , az összetett formázási metódus hívása során gyorsítótárazza.
A paraméterlistában a formátumelemnek megfelelő értékek az alábbiak szerint lesznek sztringgé alakítva:
Ha a formázandó érték az
null
, a rendszer üres sztringet String.Empty ad vissza.ICustomFormatter Ha egy implementáció elérhető, a futtatókörnyezet meghívja a metódustFormat. A futtatókörnyezet átadja a formátumelem
formatString
értékét (vagynull
ha nem jelenik meg) a metódusnak. A futtatókörnyezet az implementációt IFormatProvider is átadja a metódusnak. Ha a ICustomFormatter.Format metódus hívásanull
visszatér, a végrehajtás a következő lépésre folytatódik. Ellenkező esetben a hívás eredménye ICustomFormatter.Format lesz visszaadva.Ha az érték implementálja az IFormattable interfészt, az interfész metódusa ToString(String, IFormatProvider) lesz meghívva. Ha egy szerepel a formátumelemben, a formatString értéket a rendszer átadja a metódusnak. Ellenkező esetben az
null
átadás megtörtént. Az IFormatProvider argumentum meghatározása az alábbiak szerint történik:Numerikus érték esetén, ha egy nem null IFormatProvider argumentummal rendelkező összetett formázási metódust hív meg, a futtatókörnyezet objektumot NumberFormatInfo kér le a IFormatProvider.GetFormat metódusból. Ha nem tud megadni egyet, ha az argumentum
null
értéke , vagy ha az összetett formázási módszer nem rendelkezik paramétersel IFormatProvider , a rendszer az NumberFormatInfo aktuális kultúra objektumát használja.Dátum- és időérték esetén, ha egy nem null IFormatProvider argumentummal rendelkező összetett formázási metódust hív meg, a futtatókörnyezet objektumot DateTimeFormatInfo kér le a IFormatProvider.GetFormat metódusból. A következő helyzetekben a rendszer az DateTimeFormatInfo aktuális kultúra objektumát használja:
- A IFormatProvider.GetFormat metódus nem tud objektumot DateTimeFormatInfo megadni.
- Az argumentum értéke .
null
- Az összetett formázási módszernek nincs paramétere IFormatProvider .
Más típusú objektumok esetében, ha egy összetett formázási metódust argumentummal IFormatProvider hív meg, annak értéke közvetlenül a IFormattable.ToString megvalósításnak lesz átadva.
null
Ellenkező esetben a rendszer átadja a IFormattable.ToString megvalósításnak.
A rendszer meghívja a típus paraméter nélküli
ToString
metódusát, amely felülbírálja Object.ToString() vagy örökli az alaposztály viselkedését. Ebben az esetben a rendszer figyelmen kívül hagyja aformatString
formátumelem összetevője által megadott formátumsztringet, ha jelen van.
Az igazítás az előző lépések végrehajtása után lesz alkalmazva.
Kódpéldák
Az alábbi példa egy összetett formázással létrehozott sztringet, egy másikat pedig egy objektum metódusával ToString
hozott létre. Mindkét formázási típus egyenértékű eredményeket eredményez.
string formatString1 = string.Format("{0:dddd MMMM}", DateTime.Now);
string formatString2 = DateTime.Now.ToString("dddd MMMM");
Dim formatString1 As String = String.Format("{0:dddd MMMM}", DateTime.Now)
Dim formatString2 As String = DateTime.Now.ToString("dddd MMMM")
Feltételezve, hogy az aktuális nap egy májusi csütörtök, az előző példában szereplő mindkét sztring értéke az amerikai angol kultúrában van Thursday May
.
Console.WriteLine ugyanazt a funkciót teszi elérhetővé, mint a String.Format. A két metódus közötti egyetlen különbség az, hogy String.Format az eredményt sztringként adja vissza, míg Console.WriteLine az eredményt az objektumhoz társított kimeneti adatfolyamba Console írja. Az alábbi példa a metódust használja a Console.WriteLine pénznemértékek értékének formázására myNumber
:
int myNumber = 100;
Console.WriteLine("{0:C}", myNumber);
// The example displays the following output
// if en-US is the current culture:
// $100.00
Dim myNumber As Integer = 100
Console.WriteLine("{0:C}", myNumber)
'The example displays the following output
'if en-US Is the current culture:
' $100.00
Az alábbi példa több objektum formázását mutatja be, például egy objektum formázását két különböző módon:
string myName = "Fred";
Console.WriteLine(string.Format("Name = {0}, hours = {1:hh}, minutes = {1:mm}",
myName, DateTime.Now));
// Depending on the current time, the example displays output like the following:
// Name = Fred, hours = 11, minutes = 30
Dim myName As String = "Fred"
Console.WriteLine(String.Format("Name = {0}, hours = {1:hh}, minutes = {1:mm}",
myName, DateTime.Now))
'Depending on the current time, the example displays output Like the following:
' Name = Fred, hours = 11, minutes = 30
Az alábbi példa az igazítás formázásban való használatát mutatja be. A formázott argumentumok függőleges sávkarakterek (|
) közé kerülnek az eredményként kapott igazítás kiemeléséhez.
string firstName = "Fred";
string lastName = "Opals";
int myNumber = 100;
string formatFirstName = string.Format("First Name = |{0,10}|", firstName);
string formatLastName = string.Format("Last Name = |{0,10}|", lastName);
string formatPrice = string.Format("Price = |{0,10:C}|", myNumber);
Console.WriteLine(formatFirstName);
Console.WriteLine(formatLastName);
Console.WriteLine(formatPrice);
Console.WriteLine();
formatFirstName = string.Format("First Name = |{0,-10}|", firstName);
formatLastName = string.Format("Last Name = |{0,-10}|", lastName);
formatPrice = string.Format("Price = |{0,-10:C}|", myNumber);
Console.WriteLine(formatFirstName);
Console.WriteLine(formatLastName);
Console.WriteLine(formatPrice);
// The example displays the following output on a system whose current
// culture is en-US:
// First Name = | Fred|
// Last Name = | Opals|
// Price = | $100.00|
//
// First Name = |Fred |
// Last Name = |Opals |
// Price = |$100.00 |
Dim firstName As String = "Fred"
Dim lastName As String = "Opals"
Dim myNumber As Integer = 100
Dim formatFirstName As String = String.Format("First Name = |{0,10}|", firstName)
Dim formatLastName As String = String.Format("Last Name = |{0,10}|", lastName)
Dim formatPrice As String = String.Format("Price = |{0,10:C}|", myNumber)
Console.WriteLine(formatFirstName)
Console.WriteLine(formatLastName)
Console.WriteLine(formatPrice)
Console.WriteLine()
formatFirstName = String.Format("First Name = |{0,-10}|", firstName)
formatLastName = String.Format("Last Name = |{0,-10}|", lastName)
formatPrice = String.Format("Price = |{0,-10:C}|", myNumber)
Console.WriteLine(formatFirstName)
Console.WriteLine(formatLastName)
Console.WriteLine(formatPrice)
'The example displays the following output on a system whose current
'culture Is en-US:
' First Name = | Fred|
' Last Name = | Opals|
' Price = | $100.00|
'
' First Name = |Fred |
' Last Name = |Opals |
' Price = |$100.00 |
Lásd még
- WriteLine
- String.Format
- Sztring interpolációja (C#)
- Sztring interpolációja (Visual Basic)
- Formázási típusok
- Standard numerikus formázó sztringek
- Egyéni numerikus formázási sztringek
- Szabványos dátum- és időformátum-karakterláncok
- Egyéni dátum- és időformátum-karakterláncok
- Standard TimeSpan Formátum sztringek
- Egyéni TimeSpan formátumsztringek
- Sztringek számbavétele
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: