
StringWriter is used with HtmlTextWriter. A StringWriter instance is required in the constructor. In code that uses StringWriter, you can also use the internal StringBuilder: this allows you to convert method return values to string types.
HtmlTextWriter Use
Let's begin by looking at a complete console program that uses StringWriter. The StringWriter type is implemented with an internal StringBuilder, giving it excellent performance in most scenarios involving looping. For compatibility, we can use the internal buffer of the StringWriter directly.
This C# example program shows how you can use StringWriter from System.IO.
Program that uses StringWriter [C#]
using System;
using System.IO;
using System.Text;
using System.Web.UI;
class Program
{
static void Main()
{
// Example string data
string[] arr = new string[]
{
"One",
"Two",
"Three"
};
// Write markup and strings to StringWriter
StringWriter stringWriter = new StringWriter();
using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
{
foreach (string item in arr)
{
writer.RenderBeginTag(HtmlTextWriterTag.Div);
// Send internal StringBuilder to markup method.
WriteMarkup(item, stringWriter.GetStringBuilder());
writer.RenderEndTag();
}
}
Console.WriteLine(stringWriter.ToString());
}
/// <summary>
/// Writes to StringBuilder parameter
/// </summary>
static void WriteMarkup(string sourceString, StringBuilder builder)
{
builder.Append("Some").Append(" text");
}
}
Output
<div>
Some text
</div><div>
Some text
</div><div>
Some text
</div>
Main method. In the first part of the program, we declare a new StringWriter—which always has an internal StringBuilder. We use the StringWriter for the HtmlTextWriter mainly. The HTML is written to the StringBuilder by HtmlTextWriter.
Next, the GetStringBuilder method is used to pass a reference to the WriteMarkup method. StringBuilder is much more common than StringWriter; this fact can greatly improve compatibility.
Tip: The WriteMarkup method could return a new string containing its results, but this would be very inefficient and non-ideal; it is best to reuse buffers and write one piece at a time.

We have shown that using StringBuilder as an argument is an excellent approach—the approach presented above is an extension of that. There are minimal wasted CPU cycles due to excessive object creation. Please see the StringBuilder link at the bottom of this page.

We saw an example of StringWriter and its buffer in the C# language. When working with a buffer or StringBuilder, it is a good idea to always write new content to the same buffer—try not to create temporary strings when not needed. We combined several types—HtmlTextWriter, StringWriter and StringBuilder—into working, efficient code.
StringBuilder Secrets