请考虑以下示例。我用repartition
方法定义了一个结构
ToString()
呼叫public struct InnerStruct
{
public double a;
public double b;
public override string ToString()
{
return $"InnerStruct:\n" +
$" a: {a}\n" +
$" b: {b}";
}
}
ToString()
这样 var i = new InnerStruct(){a=1, b=2};
i.ToString()
@"InnerStruct:
a: 1
b: 2
"
给出了一个很好的可读字符串,其中ToString()
和a
缩进了四个空格。但是,可以说我有一个新的结构
b
现在写作
public struct OuterStruct
{
public double c;
public InnerStruct inner;
public override string ToString()
{
return $"OuterStruct:\n" +
$" c: {c}\n" +
$" inner: {inner.ToString()}";
}
}
但是那不是我想要的。换行符var u = new OuterStruct(){c=3, inner=i};
u.ToString()
@"OuterStruct:
c: 3
inner: InnerStruct:
a: 1
b: 2
"
强制下一行从开头开始,并从此处算起四个空格。我要
\n
即我希望相对于内部结构的缩进开始对内部结构的成员进行缩进。有什么想法吗?
答案 0 :(得分:5)
您可以添加一个指示深度的重载:
public override string ToString()
{
return ToString(0);
}
public string ToString(int depth)
{
var spaces = new string(' ', 4 * depth);
return $"InnerStruct:\n" +
$"{spaces} a: {a}\n" +
$"{spaces} b: {b}";
}
然后在打印此内部结构时,传递深度:
$" inner: {inner.ToString(1)}";
或者通过++depth
而不是1
,随便哪个。
答案 1 :(得分:1)
如何重写ToString()?
public struct InnerStruct
{
public double a;
public double b;
public override string ToString()
{
return ToString(String.Empty);
}
public string ToString(string prefix )
{
return $"{prefix}InnerStruct:\n" +
$"{prefix} a: {a}\n" +
$"{prefix} b: {b}";
}
}