Mise en forme des types
-
La manière dont les valeurs sont stockées en interne ne reflète pas nécessairement celle dont les utilisateurs souhaitent les voir. Par exemple, un numéro de téléphone peut être stocké sous la forme 8009999999, ce qui n'est pas convivial. Il devrait plutôt être affiché sous la forme 800-999-9999. Consultez la section d' Chaînes de format personnalisées pour obtenir un exemple qui met en forme un numéro de cette façon. -
La conversion d'un objet en sa représentation sous forme de chaîne n'est pas toujours intuitive. Par exemple, il n'est pas évident de savoir comment doit s'afficher la représentation sous forme de chaîne d'un objet Temperature ou Person. Pour obtenir un exemple qui met en forme un objet de la température de diverses manières, consultez la section d' Chaînes de format standard . -
Les valeurs requièrent souvent une mise en forme qui tient compte de la culture. Par exemple, dans une application qui utilise des nombre pour refléter des valeurs monétaires, les chaînes numériques doivent inclure le symbole monétaire, le séparateur de groupes (qui, dans la plupart des cultures, est le séparateur des milliers) et le symbole décimal qui correspondent à la culture actuelle. Pour obtenir un exemple, consultez la section d' Mise en forme dépendante de la culture avec les fournisseurs de format et l'interface IFormatProvider . -
Une application peut avoir à afficher la même valeur de différentes manières. Par exemple, une application peut représenter un membre d'énumération en affichant une représentation sous forme de chaîne de son nom ou en affichant sa valeur sous-jacente. Pour obtenir un exemple qui met en forme un membre de l'énumération d' DayOfWeek de différentes façons, consultez la section d' Chaînes de format standard .
Remarque
|
|---|
|
|
-
Substitution de la méthode Object.ToString pour définir une représentation sous forme de chaîne personnalisée de la valeur d'un objet. Pour plus d'informations, consultez la section Substitution de la méthode ToString, plus loin dans cette rubrique. -
Définition de spécificateurs de format qui permettent à la représentation sous forme de chaîne de la valeur d'un objet de prendre plusieurs formes. Par exemple, dans l'instruction suivante, le spécificateur de format "X" convertit un entier en la représentation sous forme de chaîne d'une valeur hexadécimale. Pour plus d'informations sur les spécificateurs de format, consultez la section Méthode ToString et chaînes de format. -
Utilisation de fournisseurs de format pour tirer parti des conventions de mise en forme d'une culture spécifique. Par exemple, l'instruction suivante affiche une valeur monétaire en utilisant les conventions de mise en forme de la culture en-US. Pour plus d'informations sur la mise en forme avec des fournisseurs de format, consultez la section Fournisseurs de format et interface IFormatProvider. -
Implémentation de l'interface IFormattable pour prendre en charge la conversion de chaînes avec la classe Convert et la mise en forme composite. Pour plus d'informations, consultez la section Interface IFormattable. -
Utilisation de la mise en forme composite pour incorporer la représentation sous forme de chaîne d'une valeur dans une chaîne plus grande. Pour plus d'informations, consultez la section Mise en forme composite. -
Implémentation d'ICustomFormatter et d'IFormatProvider pour fournir une solution de mise en forme personnalisée et complète. Pour plus d'informations, consultez la section Mise en forme personnalisée avec ICustomFormatter.
Remarque
|
|---|
|
|
using System; public class Temperature { private decimal temp; public Temperature(decimal temperature) { this.temp = temperature; } public override string ToString() { return this.temp.ToString("N1") + "°C"; } } public class Example { public static void Main() { Temperature currentTemperature = new Temperature(23.6m); Console.WriteLine("The current temperature is {0}.", currentTemperature); } } // The example displays the following output: // The current temperature is 23.6°C.
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chaînes de format standard
-
Propriété CurrencySymbol, qui spécifie le symbole monétaire de la culture actuelle. -
Propriété CurrencyNegativePattern ou CurrencyPositivePattern, qui retourne un entier déterminant : -
la position du symbole monétaire ; -
si les valeurs négatives sont indiquées par un signe négatif devant, par un signe négatif derrière ou par des parenthèses ; -
si un espace apparaît entre la valeur numérique et le symbole monétaire.
-
-
Propriété CurrencyDecimalDigits, qui définit le nombre de chiffres fractionnaires dans la chaîne de résultat. -
Propriété CurrencyDecimalSeparator, qui définit le symbole de séparateur décimal dans la chaîne de résultat. -
Propriété CurrencyGroupSeparator, qui définit le symbole du séparateur de groupes. -
Propriété CurrencyGroupSizes, qui définit le nombre de chiffres de chaque groupe situé à gauche du séparateur décimal. -
Propriété NegativeSign, qui détermine le signe négatif utilisé dans la chaîne de résultat si les parenthèses ne sont pas utilisées pour indiquer des valeurs négatives.
using System; using System.Globalization; public class Example { public static void Main() { DateTime date1 = new DateTime(2009, 6, 30); Console.WriteLine("D Format Specifier: {0:D}", date1); string longPattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern; Console.WriteLine("'{0}' custom format string: {1}", longPattern, date1.ToString(longPattern)); } } // The example displays the following output when run on a system whose // current culture is en-US: // D Format Specifier: Tuesday, June 30, 2009 // 'dddd, MMMM dd, yyyy' custom format string: Tuesday, June 30, 2009
-
Spécificateur de format "G" qui représente un format habituel ou commun de l'objet. La surcharge sans paramètre de la méthode ToString de votre objet doit appeler sa surcharge ToString(String) et lui passer la chaîne de format standard "G". -
Prise en charge d'un spécificateur de format qui est égal à une référence null (Nothing en Visual Basic). Un spécificateur de format qui est égal à une référence null doit être considéré comme équivalent au spécificateur de format "G".
public class Temperature { private decimal m_Temp; public Temperature(decimal temperature) { this.m_Temp = temperature; } public decimal Celsius { get { return this.m_Temp; } } public decimal Kelvin { get { return this.m_Temp + 273.15m; } } public decimal Fahrenheit { get { return Math.Round(((decimal) (this.m_Temp * 9 / 5 + 32)), 2); } } public override string ToString() { return this.ToString("C"); } public string ToString(string format) { // Handle null or empty string. if (String.IsNullOrEmpty(format)) format = "C"; // Remove spaces and convert to uppercase. format = format.Trim().ToUpperInvariant(); // Convert temperature to Fahrenheit and return string. switch (format) { // Convert temperature to Fahrenheit and return string. case "F": return this.Fahrenheit.ToString("N2") + " °F"; // Convert temperature to Kelvin and return string. case "K": return this.Kelvin.ToString("N2") + " K"; // return temperature in Celsius. case "C": return this.Celsius.ToString("N2") + " °C"; default: throw new FormatException(String.Format("The '{0}' format string is not supported.", format)); } } } public class Example { public static void Main() { Temperature temp1 = new Temperature(0m); Console.WriteLine(temp1.ToString()); Console.WriteLine(temp1.ToString("C")); Console.WriteLine(temp1.ToString("F")); Console.WriteLine(temp1.ToString("K")); Temperature temp2 = new Temperature(-40m); Console.WriteLine(temp2.ToString()); Console.WriteLine(temp2.ToString("C")); Console.WriteLine(temp2.ToString("F")); Console.WriteLine(temp2.ToString("K")); Temperature temp3 = new Temperature(16m); Console.WriteLine(temp3.ToString()); Console.WriteLine(temp3.ToString("C")); Console.WriteLine(temp3.ToString("F")); Console.WriteLine(temp3.ToString("K")); Console.WriteLine(String.Format("The temperature is now {0:F}.", temp3)); } } // The example displays the following output: // 0.00 °C // 0.00 °C // 32.00 °F // 273.15 K // -40.00 °C // -40.00 °C // -40.00 °F // 233.15 K // 16.00 °C // 16.00 °C // 60.80 °F // 289.15 K // The temperature is now 16.00 °C.
Chaînes de format personnalisées
using System; using System.Globalization; public class Example { public static void Main() { decimal value = 1603.42m; Console.WriteLine(value.ToString("C3", new CultureInfo("en-US"))); Console.WriteLine(value.ToString("C3", new CultureInfo("fr-FR"))); Console.WriteLine(value.ToString("C3", new CultureInfo("de-DE"))); } } // The example displays the following output: // $1,603.420 // 1 603,420 € // 1.603,420 €
|
|
|
|---|---|
|
|
|
|
|
|
Remarque
|
|---|
|
|
-
DateTimeFormatInfo , une classe qui fournit des informations de mise en forme pour les valeurs de date et d'heure pour une culture spécifique. Son implémentation de IFormatProvider.GetFormat retourne une instance d'elle-même. -
NumberFormatInfo , une classe qui fournit des informations de mise en forme des nombres pour une culture spécifique. Son implémentation de IFormatProvider.GetFormat retourne une instance d'elle-même. -
CultureInfo . Son implémentation de IFormatProvider.GetFormat peut retourner un objet NumberFormatInfo pour fournir des informations de mise en forme des nombres ou un objet DateTimeFormatInfo pour fournir des informations de mise en forme des valeurs de date et d'heure.
Mise en forme dépendante de la culture des valeurs numériques
using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { string[] cultureNames = { "en-US", "fr-FR", "es-MX", "de-DE" }; Decimal value = 1043.17m; foreach (var cultureName in cultureNames) { // Change the current thread culture. Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); Console.WriteLine("The current culture is {0}", Thread.CurrentThread.CurrentCulture.Name); Console.WriteLine(value.ToString("C2")); Console.WriteLine(); } } } // The example displays the following output: // The current culture is en-US // $1,043.17 // // The current culture is fr-FR // 1 043,17 € // // The current culture is es-MX // $1,043.17 // // The current culture is de-DE // 1.043,17 €
-
Un objet d' CultureInfo qui représente la culture dont les conventions de mise en forme seront utilisées. Sa méthode d' CultureInfo.GetFormat retourne la valeur de la propriété d' CultureInfo.NumberFormat, qui est l'objet d' NumberFormatInfo qui fournit des informations de mise en forme spécifique à la culture pour les valeurs numériques. -
Un objet d' NumberFormatInfo qui définit les conventions spécifiques à la culture de mise en forme à utiliser. Sa méthode d' GetFormat retourne une instance d'elle-même.
using System; using System.Globalization; public class Example { public static void Main() { Double value = 1043.62957; string[] cultureNames = { "en-US", "en-GB", "ru", "fr" }; foreach (var name in cultureNames) { NumberFormatInfo nfi = CultureInfo.CreateSpecificCulture(name).NumberFormat; Console.WriteLine("{0,-6} {1}", name + ":", value.ToString("N3", nfi)); } } } // The example displays the following output: // en-US: 1,043.630 // en-GB: 1,043.630 // ru: 1 043,630 // fr: 1 043,630
Mise en forme dépendante de la culture des valeurs de date et d'heure
using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { string[] cultureNames = { "en-US", "fr-FR", "es-MX", "de-DE" }; DateTime dateToFormat = new DateTime(2012, 5, 28, 11, 30, 0); foreach (var cultureName in cultureNames) { // Change the current thread culture. Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); Console.WriteLine("The current culture is {0}", Thread.CurrentThread.CurrentCulture.Name); Console.WriteLine(dateToFormat.ToString("F")); Console.WriteLine(); } } } // The example displays the following output: // The current culture is en-US // Monday, May 28, 2012 11:30:00 AM // // The current culture is fr-FR // lundi 28 mai 2012 11:30:00 // // The current culture is es-MX // lunes, 28 de mayo de 2012 11:30:00 a.m. // // The current culture is de-DE // Montag, 28. Mai 2012 11:30:00
-
Un objet d' CultureInfo qui représente la culture dont les conventions de mise en forme seront utilisées. Sa méthode d' CultureInfo.GetFormat retourne la valeur de la propriété d' CultureInfo.DateTimeFormat, qui est l'objet d' DateTimeFormatInfo qui fournit des informations de mise en forme spécifique à la culture pour les valeurs de date et d'heure. -
Un objet d' DateTimeFormatInfo qui définit les conventions spécifiques à la culture de mise en forme à utiliser. Sa méthode d' GetFormat retourne une instance d'elle-même.
using System; using System.Globalization; public class Example { public static void Main() { DateTime dat1 = new DateTime(2012, 5, 28, 11, 30, 0); string[] cultureNames = { "en-US", "en-GB", "ru", "fr" }; foreach (var name in cultureNames) { DateTimeFormatInfo dtfi = CultureInfo.CreateSpecificCulture(name).DateTimeFormat; Console.WriteLine("{0}: {1}", name, dat1.ToString(dtfi)); } } } // The example displays the following output: // en-US: 5/28/2012 11:30:00 AM // en-GB: 28/05/2012 11:30:00 // ru: 28.05.2012 11:30:00 // fr: 28/05/2012 11:30:00
-
Prise en charge de la conversion de chaînes par la classe Convert. Les appels aux méthodes Convert.ToString(Object) et Convert.ToString(Object, IFormatProvider) appellent automatiquement votre implémentation d'IFormattable. -
Prise en charge de la mise en forme composite. Si un élément de mise en forme qui inclut une chaîne de format est utilisé pour mettre en forme votre type personnalisé, le Common Language Runtime appelle automatiquement votre implémentation d'IFormattable et lui passe la chaîne de format. Pour plus d'informations sur la mise en forme composite avec des méthodes telles que String.Format ou Console.WriteLine, consultez la section Mise en forme composite.
using System; using System.Globalization; public class Temperature : IFormattable { private decimal m_Temp; public Temperature(decimal temperature) { this.m_Temp = temperature; } public decimal Celsius { get { return this.m_Temp; } } public decimal Kelvin { get { return this.m_Temp + 273.15m; } } public decimal Fahrenheit { get { return Math.Round((decimal) this.m_Temp * 9 / 5 + 32, 2); } } public override string ToString() { return this.ToString("G", null); } public string ToString(string format) { return this.ToString(format, null); } public string ToString(string format, IFormatProvider provider) { // Handle null or empty arguments. if (String.IsNullOrEmpty(format)) format = "G"; // Remove any white space and convert to uppercase. format = format.Trim().ToUpperInvariant(); if (provider == null) provider = NumberFormatInfo.CurrentInfo; switch (format) { // Convert temperature to Fahrenheit and return string. case "F": return this.Fahrenheit.ToString("N2", provider) + "°F"; // Convert temperature to Kelvin and return string. case "K": return this.Kelvin.ToString("N2", provider) + "K"; // Return temperature in Celsius. case "C": case "G": return this.Celsius.ToString("N2", provider) + "°C"; default: throw new FormatException(String.Format("The '{0}' format string is not supported.", format)); } } }
public class Example { public static void Main() { Temperature temp1 = new Temperature(22m); Console.WriteLine(Convert.ToString(temp1, new CultureInfo("ja-JP"))); Console.WriteLine("Temperature: {0:K}", temp1); Console.WriteLine("Temperature: {0:F}", temp1); Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "Temperature: {0:F}", temp1)); } } // The example displays the following output: // 22.00°C // Temperature: 295.15°K // Temperature: 71.60°F // Temperature: 71,60°F
result = String.Format("On {0:d}, the inventory of {1} was worth {2:C2}.", thatDate, item1, item1.Value); Console.WriteLine(result); // The example displays output like the following if run on a system // whose current culture is en-US: // On 5/1/2009, the inventory of WidgetA was worth $107.44.
public class ByteByByteFormatter : 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 (! formatProvider.Equals(this)) return null; // Handle only hexadecimal format string. if (! format.StartsWith("X")) return null; byte[] bytes; string output = null; // Handle only integral types. if (arg is Byte) bytes = BitConverter.GetBytes((Byte) arg); else if (arg is Int16) bytes = BitConverter.GetBytes((Int16) arg); else if (arg is Int32) bytes = BitConverter.GetBytes((Int32) arg); else if (arg is Int64) bytes = BitConverter.GetBytes((Int64) arg); else if (arg is SByte) bytes = BitConverter.GetBytes((SByte) arg); else if (arg is UInt16) bytes = BitConverter.GetBytes((UInt16) arg); else if (arg is UInt32) bytes = BitConverter.GetBytes((UInt32) arg); else if (arg is UInt64) bytes = BitConverter.GetBytes((UInt64) arg); else return null; for (int ctr = bytes.Length - 1; ctr >= 0; ctr--) output += String.Format("{0:X2} ", bytes[ctr]); return output.Trim(); } }
public class Example { public static void Main() { long value = 3210662321; byte value1 = 214; byte value2 = 19; Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0:X}", value)); Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0:X} And {1:X} = {2:X} ({2:000})", value1, value2, value1 & value2)); Console.WriteLine(String.Format(new ByteByByteFormatter(), "{0,10:N0}", value)); } } // The example displays the following output: // 00 00 00 00 BF 5E D1 B1 // 00 D6 And 00 13 = 00 12 (018) // 3,210,662,321
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Remarque