构建字符串时如何保持前一行缩进

时间:2018-08-31 07:14:09

标签: c# string

请考虑以下示例。我用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

即我希望相对于内部结构的缩进开始对内部结构的成员进行缩进。有什么想法吗?

2 个答案:

答案 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}";
    }
}