Per fare ciò usiamo il metodo “String.Format()” che accetta in input la stringa da formattare, e un array contenete le altre stringhe da inserire, al posto di segna posti speciali, costruiti con la regola: {indice dell’array}.
Es.:
MessageBox.Show(String.Format("Errore numero {0}, l'utente {1}, non ha i permessi di lettura del file {2}, inoltre {1}, non appartiene al ruolo {3}", new String[]{"123", "Mario", "file.txt", "admin"}));Di solito la scrittura di questo codice avviene nella seguente maniera:
- Si scrive: MessageBox.Show(
- Si pensa al messaggio e si inizia a scriverlo: "Errore numero …
- Ci si accorge che il messaggio dovrà contenere dei pezzi di stringa all’interno della stringa principale.
- Si aggiungono i segna posto per i pezzi di stringa: numero {0}, l'utente {1}, non
- Completata la frase, ci si posiziona all’inizio della frase stessa.
- Si digita String.Format(
- Si va alla fine della frase e si chiude la parentesi )
Per risparmiare tempo e trovare più naturalezza nella scrittura, ho implementato la seguente classe per estendere la classe System.String:
namespace System { /// <summary> /// Estensioni per le classi stringa /// </summary> public static class StringEx { /// <summary> /// Formatta la stringa /// </summary> /// <param name="pValue">Stringa</param> /// <param name="args">Parametri</param> /// <returns>Stringa formattata</returns> public static string Formatting(this String pValue, params object[] args) { return String.Format(pValue, args); } /// <summary> /// Formatta la stringa /// </summary> /// <param name="pValue">Stringa</param> /// <param name="format">Format provider</param> /// <param name="args">Parametri</param> /// <returns>Stringa formattata</returns> public static string Formatting(this String pValue, IFormatProvider format, params object[] args) { return String.Format(format, pValue, args); } } }Ora potere scrivere lo stesso codice dell’esempio di prima in maniera naturale, senza bisogno di tornare a cercare dove inizia la vostra Stringa:
MessageBox.Show("Errore numero {0}, l'utente {1}, non ha i permessi di lettura del file {2}, inoltre {1}, non appartiene al ruolo {3}".Formatting(new String[] { "123", "Mario", "file.txt", "admin" }));