请考虑以下示例.我用ToString()方法定义一个结构
public struct InnerStruct
{
public double a;
public double b;
public override string ToString()
{
return $"InnerStruct:\n" +
$" a: {a}\n" +
$" b: {b}";
}
}
Run Code Online (Sandbox Code Playgroud)
调用 ToString()
var i = new InnerStruct(){a=1, b=2};
i.ToString()
@"InnerStruct:
a: 1
b: 2
"
Run Code Online (Sandbox Code Playgroud)
因此,它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()}";
}
}
Run Code Online (Sandbox Code Playgroud)
现在写作
var u = new OuterStruct(){c=3, inner=i};
u.ToString()
@"OuterStruct:
c: 3
inner: InnerStruct:
a: 1
b: 2
"
Run Code Online (Sandbox Code Playgroud)
但那不是我想要的.换行\n强制下一行从头开始,从那里算出四个空格.我想要
@"OuterStruct:
c: 3
inner: InnerStruct:
a: 1
b: 2
"
Run Code Online (Sandbox Code Playgroud)
即我希望内部结构的成员的缩进相对于内部结构的缩进开始.有什么想法吗?
您可以添加指示深度的重载:
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}";
}
Run Code Online (Sandbox Code Playgroud)
然后在打印这个内部结构时,传递深度:
$" inner: {inner.ToString(1)}";
Run Code Online (Sandbox Code Playgroud)
或者通过++depth代替1,无论你想要什么.