Я обычно просто делаю что-то вроде этого (в своем классе приложений):
static TextWriter tw;
static int indentLevel = 0;
static void Indend()
{
indentLevel++;
}
static void Outdent()
{
indentLevel--;
}
static void WriteLine(string s)
{
tw.WriteLine(new string('\t', indentLevel) + s);
}
static void WriteLine()
{
tw.WriteLine();
}
, а затем, например,
using (tw = new StreamWriter(outputName))
{
WriteLine(string.Format("namespace {0}", nameSpace));
WriteLine("{");
Indend();
foreach (string s in dataSourceItems)
GenerateProc(s);
Outdent();
WriteLine("}");
}
Вы можете, очевидно, инкапсулировать это в отдельный класс, если хотите.