System.String を演算子のオーバーロードで拡張できるとは思いませんが、文字列ラッパー クラスを作成してそれを行うことはできます。
public class StringWrapper
{
public string Value { get; set; }
public StringWrapper()
{
this.Value = string.Empty;
}
public StringWrapper(string value)
{
this.Value = value;
}
public static StringWrapper operator *(StringWrapper wrapper,
int timesToRepeat)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < timesToRepeat; i++)
{
builder.Append(wrapper.Value);
}
return new StringWrapper(builder.ToString());
}
}
次に、次のように呼び出します...
var helloTimesThree = new StringWrapper("hello") * 3;
そして、値を取得します...
helloTimesThree.Value;
もちろん、関数を追跡して現在の深さを渡し、それに基づいて for ループでタブをダンプするのが賢明です。