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