title: How to use StringBuilder wisely?
body: <p>I am little confused about using <code>StringBuilder</code> class, first:</p>
  
  <blockquote>
    <p>A <code>string</code> object concatenation operation always creates a new object from the existing <code>string</code> and the new data. A <code>StringBuilder</code> object maintains a buffer to accommodate the concatenation of new data. New data is appended to the end of the buffer if room is available; otherwise, a new, larger buffer is allocated, data from the original buffer is copied to the new buffer, then the new data is appended to the new buffer.</p>
  </blockquote>
  
  <p>But where is the point of creating <code>StringBuilder</code> instance to avoid creating new one of <code>String</code>? It sounds like trading "one for one".</p>
  
  <pre><code>static void Main(string[] args)
  {
      String foo = "123";
      using (StringBuilder sb = new StringBuilder(foo)) // also sb isn't disposable, so there will be error
      {
          sb.Append("456");
          foo = sb.ToString();
      }
  
      Console.WriteLine(foo);
      Console.ReadKey();
  }
  </code></pre>
  
  <p>Why I shouldn't just use</p>
  
  <pre><code>+=
  </code></pre>
  
  <p><strong><em>Edit:</em></strong> Ok, I know now how to reuse one instance of <code>StringBuilder</code> (still don't know if this is right with code standards), but this isn't worth to use with just one <code>string</code>, isn't it?</p>