Recherche…


Introduction

Les méthodes Format sont un ensemble de surcharges dans la classe System.String utilisées pour créer des chaînes qui combinent des objets dans des représentations de chaîne spécifiques. Ces informations peuvent être appliquées à String.Format , à diverses méthodes WriteLine et à d’autres méthodes du framework .NET.

Syntaxe

  • string.Format (format de chaîne, params object [] args)
  • string.Format (fournisseur IFormatProvider, format de chaîne, paramètres params [] args)
  • $ "string {text} blablabla" // Depuis C # 6

Paramètres

Paramètre Détails
format Une chaîne de format composite , qui définit la manière dont les arguments doivent être combinés en une chaîne.
args Une séquence d'objets à combiner en une chaîne. Comme il utilise un argument params , vous pouvez utiliser une liste d'arguments séparés par des virgules ou un tableau d'objets réel.
fournisseur Une collection de façons de formater des objets en chaînes. Les valeurs typiques incluent CultureInfo.InvariantCulture et CultureInfo.CurrentCulture .

Remarques

Remarques:

  • String.Format() gère null arguments null sans lancer d'exception.
  • Il existe des surcharges qui remplacent le paramètre args par un, deux ou trois paramètres d'objet.

Endroits où String.Format est "incorporé" dans la structure

Il y a plusieurs endroits où vous pouvez utiliser String.Format indirectement : Le secret est de rechercher la surcharge avec le string format, params object[] args signature string format, params object[] args , par exemple:

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

Peut être remplacé par une version plus courte:

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

Il existe d'autres méthodes qui utilisent également String.Format par exemple:

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

Utilisation du format numérique personnalisé

NumberFormatInfo peut être utilisé pour formater des nombres entiers et flottants.

// 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);

Créer un fournisseur de format personnalisé

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;
    }
}

Usage:

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

Sortie:

-> dlroW olleH <-

Aligner à gauche / à droite, pad avec des espaces

La deuxième valeur dans les accolades indique la longueur de la chaîne de remplacement. En ajustant la deuxième valeur pour qu'elle soit positive ou négative, l'alignement de la chaîne peut être modifié.

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

Sortie:

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

Formats numériques

// 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);

Sortie:

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%

Mise en forme de devise

Le spécificateur de format "c" (ou devise) convertit un nombre en une chaîne représentant un montant en devise.

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

Précision

La valeur par défaut est 2. Utilisez c1, c2, c3, etc. pour contrôler la précision.

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

Symbole de la monnaie

  1. Passez l'instance de CultureInfo pour utiliser le symbole de culture personnalisé.
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. Utilisez n'importe quelle chaîne comme symbole de devise. Utilisez NumberFormatInfo pour personnaliser le symbole monétaire.
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

Position du symbole monétaire

Utilisez CurrencyPositivePattern pour les valeurs positives et CurrencyNegativePattern pour les valeurs négatives.

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 $

L'utilisation d'un motif négatif est identique à un motif positif. Beaucoup plus de cas d'utilisation s'il vous plaît se référer au lien original.

Séparateur décimal personnalisé

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

Depuis C # 6.0

6,0

Depuis C # 6.0, il est possible d'utiliser l'interpolation de chaînes à la place de String.Format .

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

Bonjour John Doe!

Plus d'exemples pour cela sous la rubrique Fonctions C # 6.0: Interpolation de chaînes .

Echappement des accolades dans une expression String.Format ()

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"

Formatage de date

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}");

sortie:

06
Лхагва
06
Spécificateur Sens Échantillon Résultat
Rendez-vous amoureux {0:d} 7/6/2016
dd Jour, sans rembourrage {0:dd} 06
ddd Nom de jour court {0:ddd} Mer
dddd Nom de la journée complète {0:dddd} Mercredi
Longue date {0:D} Mercredi 6 juillet 2016
F Date complète et heure, courte {0:f} Mercredi 6 juillet 2016 18h30
ff Secondes fractions, 2 chiffres {0:ff} 20
fff Secondes fractions, 3 chiffres {0:fff} 201
ffff Deuxième fraction, 4 chiffres {0:ffff} 2016
F Date et heure complètes, longues {0:F} Mercredi 6 juillet 2016 18h30
g Date et heure par défaut {0:g} 7/6/2016 18h30
gg Ère {0:gg} UN D
hh Heure (2 chiffres, 12H) {0:hh} 06
HH Heure (2 chiffres, 24H) {0:HH} 18
M Mois et jour {0:M} 6 juillet
mm Minutes, zéro-rembourré {0:mm} 30
MM Mois, zéro-rembourré {0:MM} 07
MMM Nom du mois à 3 lettres {0:MMM} Juil
MMMM Nom complet du mois {0:MMMM} juillet
ss Secondes {0:ss} 14
r RFC1123 date {0:r} Mer. 06 juil. 2016 18:30:14 GMT
s Chaîne de date triable {0:s} 2016-07-06T18: 30: 14
t Court instant {0:t} 18H30
T Longtemps {0:T} 18h30
tt MATIN APRÈS-MIDI {0:tt} PM
tu Heure locale triable universelle {0:u} 2016-07-06 18: 30: 14Z
U Universal GMT {0:U} Mercredi 6 juillet 2016 09:30:14
Y Mois et année {0:Y} Juillet 2016
yy Année à 2 chiffres {0:yy} 16
aaaa Année à 4 chiffres {0:yyyy} 2016
zz Décalage du fuseau horaire à 2 chiffres {0:zz} +09
zzz décalage du fuseau horaire complet {0:zzz} +09: 00

ToString ()

La méthode ToString () est présente sur tous les types d’objets de référence. Cela est dû au fait que tous les types de référence sont dérivés de Object qui a la méthode ToString (). La méthode ToString () sur la classe de base de l'objet renvoie le nom du type. Le fragment ci-dessous imprimera "Utilisateur" sur la 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());

Cependant, la classe User peut également remplacer ToString () afin de modifier la chaîne renvoyée. Le fragment de code ci-dessous affiche "Id: 5, Name: User1" sur la 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());

Relation avec ToString ()

Bien que la méthode String.Format() soit certainement utile pour formater des données sous forme de chaînes, cela peut souvent être un peu exagéré, en particulier lorsque vous travaillez avec un seul objet, comme indiqué ci-dessous:

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

Une approche plus simple pourrait être d'utiliser simplement la méthode ToString() disponible sur tous les objets de C #. Il prend en charge toutes les mêmes chaînes de formatage standard et personnalisées , mais ne nécessite pas le mappage de paramètres nécessaire, car il n'y aura qu'un seul argument:

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

Restrictions relatives aux mises en garde et au formatage

Bien que cette approche soit peut-être plus simple dans certains scénarios, l’approche ToString() est limitée en ce qui concerne l’ajout de padding à gauche ou à droite comme vous le feriez dans la méthode String.Format() :

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

Pour accomplir ce même comportement avec la méthode ToString() , vous devez utiliser une autre méthode comme PadLeft() ou PadRight() respectivement:

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow