Forse una delle funzionalità più importanti e utili ma anche potenti è flessibili è la possibilità di rappresentare attraverso "stringhe composite" (cosidette composite string) le regole di formatting da un tipo .NET verso una stringa e viceversa nel caso del parsing.

Di seguito sintetizzo in forma tabellare regole e riferimenti alle specifiche dettagliate, compresi gli utilissimi link verso le tabelle che definiscono le stringhe di formattazione.


Composite Formatting Sintassi/Regole/Tabelle per implementare le stringhe composte di formattazione
{n[,[-]w][:f]} Sintassi generale elemento di formattazione
n Obbligatorio: "n" è l'indice della variabile il cui valore è da formattare
[,[-]w] Opzionale: "[,[-]w]" indica la larghezza minima del testo formattato
  • Se positivo e la lunghezza della stringa formattata è minore di w allora vengono aggiunti all'inizio tanti spazi quanti w (corrisponde ad effettuare un PadLeft() su un tipo string)
  • Se negativo e la lunghezza della stringa formattata è minore di w allora vengono aggiunti in fondo tanti spazi quanti w (corrisponde ad effettuare un PadRight() su un tipo string)
[:f] Opzionale: "[:f]" indica la stringa di formattazione
Code Snippet
  1.         [Test]
  2.         public void UseOfMinimumWidthInStringFormatItem()
  3.         {
  4.             var d = 10.5M;
  5.  
  6.             Assert.AreEqual("10.5", string.Format(CultureInfo.InvariantCulture, "{0}", d));
  7.             Assert.AreEqual("      10.5", string.Format(CultureInfo.InvariantCulture, "{0,10}", d));
  8.             Assert.AreEqual("10.5".PadLeft(10), string.Format(CultureInfo.InvariantCulture, "{0,10}", d));
  9.             Assert.AreEqual("10.5      ", string.Format(CultureInfo.InvariantCulture, "{0,-10}", d));
  10.             Assert.AreEqual("10.5".PadRight(10), string.Format(CultureInfo.InvariantCulture, "{0,-10}", d));
  11.         }
Stringhe di formattazione Standard Risolvono problemi generici di formattazione, consistono di una lettera opzionalmente seguita da un numero indicate il numero dei digit da applicare in formattazione
Standard Numeric Format Strings Tabella stringhe standard di formattazione per i tipi numerici
Standard Date and Time Format Strings Tabella stringhe standard di formattazione per i tipi data e ora
Code Snippet
  1.         [Test]
  2.         public void UseOfStandardFormatStringHonoringLocalCultureIt()
  3.         {
  4.             var d = 1250.75M;
  5.             var dt = new DateTime(2010, 1, 1, 15, 30, 30);
  6.  
  7.             Assert.AreEqual("          € 1.250,75", string.Format("{0,20:C}", d));
  8.             Assert.AreEqual("01/01/2010 15:30    ", string.Format("{0,-20:g}", dt));
  9.         }
Stringhe di formattazione Custom Per formattare in modo preciso e puntuale ogni carattare secondo un template
Custom Numeric Format Strings Tabella stringhe custom di formattazione per i tipi numerici
Custom Date and Time Format Strings Tabella stringhe custom di formattazione per i tipi data e ora
Code Snippet
  1.         [Test]
  2.         public void UseOfCustomFormatString()
  3.         {
  4.             var d = 1250.75M;
  5.             var dt = new DateTime(2010, 1, 1, 15, 30, 30);
  6.  
  7.             Assert.AreEqual("      eur 001.250,75", string.Format("{0,20:eur 000,000.00}", d));
  8.             Assert.AreEqual("1-1-10 15:30.30     ", string.Format("{0,-20:d-M-yy HH:mm.ss}", dt));
  9.         }
Enumerazioni di stili Utilizzati per il parsing delle stringhe per i tipi numerici o data e ora
NumberStyles Enumeration Enumerazione di stili per il parsing di tipi numerici
DateTimeStyles Enumeration Enumerazione di stili per il parsing di tipi data e ora
Code Snippet
  1.  
  2.         [Test]
  3.         public void ParsingStringHonoringLocalCultureItAndUsingSpecificStyles()
  4.         {
  5.             var d = 1250.75M;
  6.             var dt = new DateTime(2010, 1, 1, 15, 30, 00);
  7.  
  8.             Assert.AreEqual(d, decimal.Parse("          € 1.250,75", NumberStyles.Currency));
  9.             Assert.AreEqual(dt, DateTime.Parse("01/01/2010 15:30    ", CultureInfo.CurrentCulture,
  10.                                                             DateTimeStyles.AllowWhiteSpaces));
  11.         }
System.Globalization.CultureInfo.CurrentCulture Cultura corrente: Nella maggioranza dei casi formatting & parsing si onora la cultura corrente
System.IFormatProvider Fornisce informazioni per la formattazione, la maggioranza dei metodi di formatting & parsing implementano overload che dove è possibile passarlo come parametro
System.Threading.Thread.CurrentCulture Per ottenere e/o cambiare la cultura del thread Corrente
System.Globalization.CultureInfo.DefaultThreadCurrentCulture Per ottenere e/o cambiare la cultura di default per tutti i threads (solo .NET 4.5)
System.Globalization.CultureInfo.InvariantCulture Cultura invariante rispetto all'ambiente di esecuzione (NOTA: basata sulla cultura americana)
Code Snippet
  1.         [Test]
  2.         public void UseOfStandardFormatStringPassingUsingSpecifingCulture()
  3.         {
  4.             var d = 1250.75M;
  5.             var dt = new DateTime(2010, 1, 1, 15, 30, 30);
  6.  
  7.             CultureInfo it = new CultureInfo("it-IT");
  8.             CultureInfo us = new CultureInfo("en-US");
  9.  
  10.             Assert.AreEqual("          € 1.250,75", string.Format(it, "{0,20:C}", d));
  11.             Assert.AreEqual("01/01/2010 15:30    ", string.Format(it, "{0,-20:g}", dt));
  12.             Assert.AreEqual("           $1,250.75", string.Format(us, "{0,20:C}", d));
  13.             Assert.AreEqual("1/1/2010 3:30 PM    ", string.Format(us, "{0,-20:g}", dt));
  14.         }