C# 如何在构建字符串时保持上一行的缩进
考虑下面的例子。我用ToString方法定义了一个结构 调用ToString 所以ToString给出了一个漂亮且可读的字符串,其中a和B缩进四个空格。然而,假设我有一个新的结构C# 如何在构建字符串时保持上一行的缩进,c#,string,C#,String,考虑下面的例子。我用ToString方法定义了一个结构 调用ToString 所以ToString给出了一个漂亮且可读的字符串,其中a和B缩进四个空格。然而,假设我有一个新的结构 public struct OuterStruct { public double c; public InnerStruct inner; public override string ToString() { return $"OuterStruct:\n" +
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强制下一行从开头开始,并从那里开始计算四个空格。我想要
@"OuterStruct:
c: 3
inner: InnerStruct:
a: 1
b: 2
"
即,我希望内部结构成员的缩进相对于内部结构的缩进开始。有什么想法吗?您可以添加一个指示深度的重载:
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)}";
或者传递++深度,而不是1,任意选择。您可以添加指示深度的重载:
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)}";
或者传递++深度而不是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}";
}
}
对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}";
}
}
请注意,如果要将其用作$INERNAR:{INERNAR.ToString1};,然后您应该使用InnerStruct:\n而不是{spaces}InnerStruct:\n.Ha,这比我想得快:有趣的是:如果我有更深层的嵌套,这会起作用吗。我需要跟踪筑巢的深度吗?例如,根据深度传递8、12、16等。@morty然后将++深度传递给下一个ToString调用。请注意,如果要将其用作$inner:{inner.ToString};,然后您应该使用InnerStruct:\n而不是{spaces}InnerStruct:\n.Ha,这比我想得快:有趣的是:如果我有更深层的嵌套,这会起作用吗。我需要跟踪筑巢的深度吗?例如,根据深度传递8、12、16等。@morty然后将++深度传递给下一个ToString调用。