<p>Suppose I have a stringbuilder in C# that does this:</p>

<pre><code>StringBuilder sb = new StringBuilder();
string cat = "cat";
sb.Append("the ").Append(cat).(" in the hat");
string s = sb.ToString();
</code></pre>

<p>would that be as efficient or any more efficient as having:</p>

<pre><code>string cat = "cat";
string s = String.Format("The {0} in the hat", cat);
</code></pre>

<p>If so, why?</p>

<p><strong>EDIT</strong> </p>

<p>After some interesting answers, I realised I probably should have been a little clearer in what I was asking. I wasn't so much asking for which was quicker at concatenating a string, but which is quicker at <strong><em>injecting</em></strong> one string into another.</p>

<p>In both cases above I want to inject one or more strings into the middle of a predefined template string.</p>

<p>Sorry for the confusion</p>

I would suggest not, since String.Format was not designed for concatenation, it was design for formatting the output of various inputs such as a date.
```
```
String s = String.Format("Today is {0:dd-MMM-yyyy}.", DateTime.Today);
```
```