Un tipo di dato non è adibito al solo contenimento di informazioni ma anche alla sua manipolazione ed alterazione. Il tipo System.String fornisce diversi metodi per la manipolazione di testi.

String s = "Colore bianco";
s = s.Replace("bianco", "rosso");
Console.WriteLine(s);

C’è da tenere presente una cosa, il tipo System.String è immutabile, ciò vuol dire che ogni qual volta il suo valore cambia, viene istanziato un nuovo oggetto string con il nuovo valore e si perde il riferimento al vecchio (potrà sembrarvi strano ma il .Net Framework funziona cosi e non è il solo). Forse un esempio può chiarire meglio:

String s = "bianco"; 	// bianco
s += " rosso";		// bianco rosso
s += " verde";		// bianco rosso verde
Console.WriteLine(s);

Quando questo codice viene eseguito, solo l’ultima stringa ha un riferimento, le precedenti 3 sono state rilasciate nel garbage collector. Evitare questa modalità di utilizzo delle stringhe permette di far lavorare meno il Garbage Collector aumentando di conseguenza le performance. Di seguito una serie di consigli per ovviare a questo problema:

  • Utilizzare i metodi Concat,Join o Format per unire puù stringhe in una sola.
  • Utilizzare la classe StringBuilder per creare dinamicamente testi (mutabili).

Ripropongo lo stesso esempio di prima, questa volta utilizzando uno StringBuilder

StringBuilder sb = new StringBuilder();
sb.Append("bianco");
sb.Append(" rosso");
sb.Append(" verde");
Console.WriteLine(sb.ToString());

In questo esempio, per quanto detto prima, è facile intuire come la gestione della stringa viene affidata allo StringBuilder il quale si occupa della elaborazione del testo rendendo il dato mutabile.