Zoeken…


Invoering

De Format zijn een reeks overbelastingen in de klasse System.String die wordt gebruikt om tekenreeksen te maken die objecten combineren in specifieke tekenreeksrepresentaties. Deze informatie kan worden toegepast op String.Format , verschillende WriteLine methoden en andere methoden in het .NET-framework.

Syntaxis

  • string.Format (tekenreeksindeling, params-object [] args)
  • string.Format (IFormatProvider-provider, tekenreeksindeling, params-object [] args)
  • $ "string {text} blablabla" // Sinds C # 6

parameters

Parameter Details
formaat Een samengestelde opmaakreeks die bepaalt hoe args tot een reeks moeten worden gecombineerd.
args Een reeks objecten om te combineren tot een string. Aangezien dit een params argument gebruikt, kunt u een door komma's gescheiden lijst met argumenten of een werkelijke objectarray gebruiken.
leverancier Een verzameling manieren om objecten naar tekenreeksen op te maken. Typische waarden zijn CultureInfo.InvariantCulture en CultureInfo.CurrentCulture .

Opmerkingen

Opmerkingen:

  • String.Format() verwerkt null argumenten zonder een uitzondering te maken.
  • Er zijn overbelastingen die de parameter args vervangen door één, twee of drie objectparameters.

Plaatsen waar String.Format 'ingebed' is in het framework

Er zijn verschillende plaatsen waar u String.Format indirect kunt gebruiken: Het geheim is om te zoeken naar de overbelasting met het handtekeningstringformaat string format, params object[] args , bijvoorbeeld:

Console.WriteLine(String.Format("{0} - {1}", name, value));

Kan worden vervangen door een kortere versie:

Console.WriteLine("{0} - {1}", name, value);

Er zijn andere methoden die ook String.Format gebruiken String.Format bijvoorbeeld:

Debug.WriteLine(); // and Print()
StringBuilder.AppendFormat();

Aangepast nummerformaat gebruiken

NumberFormatInfo kan worden gebruikt voor het opmaken van zowel gehele getallen als zwevende getallen.

// invariantResult is "1,234,567.89"
var invarianResult = string.Format(CultureInfo.InvariantCulture, "{0:#,###,##}", 1234567.89);

// NumberFormatInfo is one of classes that implement IFormatProvider
var customProvider = new NumberFormatInfo
{
    NumberDecimalSeparator = "_NS_", // will be used instead of ','
    NumberGroupSeparator = "_GS_", // will be used instead of '.'
};

// customResult is "1_GS_234_GS_567_NS_89"
var customResult = string.Format(customProvider, "{0:#,###.##}", 1234567.89);

Maak een aangepaste indelingsprovider

public class CustomFormat : IFormatProvider, ICustomFormatter
{
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (!this.Equals(formatProvider))
        {
            return null;
        }

        if (format == "Reverse")
        {
            return String.Join("", arg.ToString().Reverse());
        }

        return arg.ToString();
    }

    public object GetFormat(Type formatType)
    {
        return formatType==typeof(ICustomFormatter) ? this:null;
    }
}

Gebruik:

String.Format(new CustomFormat(), "-> {0:Reverse} <-", "Hello World");

Output:

-> dlroW olleH <-

De tweede waarde in de accolades bepaalt de lengte van de vervangende string. Door de tweede waarde aan te passen als positief of negatief, kan de uitlijning van de tekenreeks worden gewijzigd.

string.Format("LEFT:  string: ->{0,-5}<- int: ->{1,-5}<-", "abc", 123);
string.Format("RIGHT: string: ->{0,5}<- int: ->{1,5}<-", "abc", 123);

Output:

LEFT:  string: ->abc  <- int: ->123  <-
RIGHT: string: ->  abc<- int: ->  123<-

Numerieke formaten

// Integral types as hex
string.Format("Hexadecimal: byte2: {0:x2}; byte4: {0:X4}; char: {1:x2}", 123, (int)'A');

// Integers with thousand separators
string.Format("Integer, thousand sep.: {0:#,#}; fixed length: >{0,10:#,#}<", 1234567);

// Integer with leading zeroes
string.Format("Integer, leading zeroes: {0:00}; ", 1);

// Decimals
string.Format("Decimal, fixed precision: {0:0.000}; as percents: {0:0.00%}", 0.12);

Output:

Hexadecimal: byte2: 7b; byte4: 007B; char: 41
Integer, thousand sep.: 1,234,567; fixed length: > 1,234,567<
Integer, leading zeroes: 01; 
Decimal, fixed precision: 0.120; as percents: 12.00%

Valutanotatie

De specificator "c" (of valuta) formaat converteert een getal naar een string die een valutabedrag vertegenwoordigt.

string.Format("{0:c}", 112.236677) // $112.23 - defaults to system

precisie

Standaard is 2. Gebruik c1, c2, c3 enzovoort om de precisie te regelen.

string.Format("{0:C1}", 112.236677) //$112.2
string.Format("{0:C3}", 112.236677) //$112.237
string.Format("{0:C4}", 112.236677) //$112.2367
string.Format("{0:C9}", 112.236677) //$112.236677000

Symbool van munteenheid

  1. Geef de CultureInfo instantie door om een aangepast cultuursymbool te gebruiken.
string.Format(new CultureInfo("en-US"), "{0:c}", 112.236677); //$112.24
string.Format(new CultureInfo("de-DE"), "{0:c}", 112.236677); //112,24 €
string.Format(new CultureInfo("hi-IN"), "{0:c}", 112.236677); //₹ 112.24
  1. Gebruik een willekeurige string als valutasymbool. Gebruik NumberFormatInfo om het NumberFormatInfo aan te passen.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
nfi.CurrencySymbol = "?";
string.Format(nfi, "{0:C}", 112.236677); //?112.24
nfi.CurrencySymbol = "?%^&";
string.Format(nfi, "{0:C}", 112.236677); //?%^&112.24

Positie van valutasymbool

Gebruik CurrencyPositivePattern voor positieve waarden en CurrencyNegativePattern voor negatieve waarden.

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
string.Format(nfi, "{0:C}", 112.236677); //$112.24 - default
nfi.CurrencyPositivePattern = 1;
string.Format(nfi, "{0:C}", 112.236677); //112.24$
nfi.CurrencyPositivePattern = 2;
string.Format(nfi, "{0:C}", 112.236677); //$ 112.24
nfi.CurrencyPositivePattern = 3; 
string.Format(nfi, "{0:C}", 112.236677); //112.24 $

Negatief patroongebruik is hetzelfde als positief patroon. Veel meer use cases verwijzen wij u naar de originele link.

Aangepaste decimale scheidingsteken

NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;        
nfi.CurrencyPositivePattern = 0;
nfi.CurrencyDecimalSeparator = "..";
string.Format(nfi, "{0:C}", 112.236677); //$112..24

Sinds C # 6.0

6.0

Sinds C # 6.0 is het mogelijk stringinterpolatie te gebruiken in plaats van String.Format .

string name = "John";
string lastname = "Doe";
Console.WriteLine($"Hello {name} {lastname}!");

Hallo John Doe!

Meer voorbeelden hiervan onder het onderwerp C # 6.0 kenmerken: String-interpolatie .

Ontsnappende accolades binnen een String.Format () -uitdrukking

string outsidetext = "I am outside of bracket";
string.Format("{{I am in brackets!}} {0}", outsidetext);

//Outputs "{I am in brackets!} I am outside of bracket"

Datumnotatie

DateTime date = new DateTime(2016, 07, 06, 18, 30, 14);
// Format: year, month, day hours, minutes, seconds

Console.Write(String.Format("{0:dd}",date)); 

//Format by Culture info
String.Format(new System.Globalization.CultureInfo("mn-MN"),"{0:dddd}",date);
6.0
Console.Write($"{date:ddd}");

output:

06
Лхагва
06
specifier Betekenis Monster Resultaat
d Datum {0:d} 2016/07/06
dd Dag, zonder vulling {0:dd} 06
ddd Korte dagnaam {0:ddd} trouwen
dddd Volledige dagnaam {0:dddd} woensdag
D Lange date {0:D} Woensdag 6 juli 2016
f Volledige datum en tijd, kort {0:f} Woensdag 6 juli 2016 18.30 uur
ff Tweede breuken, 2 cijfers {0:ff} 20
fff Tweede breuken, 3 cijfers {0:fff} 201
ffff Tweede breuken, 4 cijfers {0:ffff} 2016
F Volledige datum en tijd, lang {0:F} Woensdag 6 juli 2016 18.30:14 uur
g Standaard datum en tijd {0:g} 6-7-2016 18.30 uur
gg Tijdperk {0:gg} ADVERTENTIE
hh Uur (2 cijfers, 12H) {0:hh} 06
HH Uur (2 cijfers, 24 uur) {0:HH} 18
M Maand en dag {0:M} 6 juli
mm Minuten, zonder voering {0:mm} 30
MM Maand, zonder vulling {0:MM} 07
MMM 3-letterige maandnaam {0:MMM} juli
MMMM Volledige maandnaam {0:MMMM} juli
ss seconden {0:ss} 14
r RFC1123 datum {0:r} Woe, 06 jul 2016 18:30:14 GMT
s Sorteerbare datumstring {0:s} 2016-07-06T18: 30: 14
t Korte tijd {0:t} 18.30 uur
T Lange tijd {0:T} 18.30:14 uur
tt AM PM {0:tt} P.M
u Universele sorteerbare lokale tijd {0:u} 2016-07-06 18: 30: 14Z
U Universele GMT {0:U} Woensdag 6 juli 2016 09:30:14 uur
Y Maand en jaar {0:Y} Juli 2016
yy 2 cijferig jaar {0:yy} 16
yyyy 4 cijferig jaar {0:yyyy} 2016
zz 2-cijferige tijdzone-offset {0:zz} 09
zzz volledige tijdzone offset {0:zzz} 09: 00

ToString ()

De methode ToString () is aanwezig op alle referentieobjecttypen. Dit komt doordat alle referentietypen zijn afgeleid van Object waarop de methode ToString () staat. De methode ToString () van de objectbasisklasse retourneert de typenaam. Het onderstaande fragment drukt "Gebruiker" af naar de console.

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

De klasse Gebruiker kan ToString () echter ook overschrijven om de tekenreeks te wijzigen die wordt geretourneerd. Het onderstaande codefragment drukt "Id: 5, Name: User1" af naar de console.

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
    public override ToString()
    {
        return string.Format("Id: {0}, Name: {1}", Id, Name);
    }
}

...

var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());

Relatie met ToString ()

Hoewel de String.Format() -methode zeker nuttig is bij het formatteren van gegevens als tekenreeksen, kan het vaak een beetje overdreven zijn, vooral als het gaat om een enkel object, zoals hieronder te zien is:

String.Format("{0:C}", money);  // yields "$42.00"

Een eenvoudigere benadering kan zijn om eenvoudigweg de methode ToString() gebruiken die beschikbaar is op alle objecten in C #. Het ondersteunt alle dezelfde standaard- en aangepaste opmaakreeksen , maar vereist geen noodzakelijke parametertoewijzing, omdat er maar één argument is:

money.ToString("C");  // yields "$42.00"

Voorbehoud & opmaakbeperkingen

Hoewel deze aanpak in sommige scenario's eenvoudiger kan zijn, is de ToString() -benadering beperkt met betrekking tot het toevoegen van linker- of rechteropvulling zoals u zou doen binnen de String.Format() -methode:

String.Format("{0,10:C}", money);  // yields "    $42.00"

Om hetzelfde gedrag te bereiken met de methode ToString() , moet u een andere methode gebruiken PadRight() respectievelijk PadLeft() of PadRight() :

money.ToString("C").PadLeft(10);  // yields "    $42.00"


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow