【发布时间】:2021-05-07 12:25:20
【问题描述】:
我正在尝试在 StringBuilder 中缩进字符串块,但我得到的只是第一行的缩进。我理解它为什么这样做,但不知道是否有任何简单的方法可以实现我想要的。
void Main()
{
var subLines = new StringBuilder();
subLines.AppendLine("Sub Line1");
subLines.AppendLine("Sub Line2");
subLines.AppendLine("Sub Line3");
var mainLines = new StringBuilder();
mainLines.AppendLine("Main Line 1");
mainLines.AppendLine("Main Line 2");
mainLines.Append("\t").Append(subLines.ToString());
mainLines.AppendLine("Main Line 3");
mainLines.ToString().Dump();
}
实际输出
Main Line 1
Main Line 2
Sub Line1
Sub Line2
Sub Line3
Main Line 3
预期输出
Main Line 1
Main Line 2
Sub Line1
Sub Line2
Sub Line3
Main Line 3
我也尝试过使用IndentedTextWriter,但结果相同。
public static class StringBuilderExtensions
{
public static StringBuilder AppendIndented(this StringBuilder sb, string text)
{
var textWriter = new StringWriter(sb);
var indentWriter = new IndentedTextWriter(textWriter, "\t\t");
indentWriter.WriteLine("");
indentWriter.Indent = 1;
indentWriter.WriteLine(text);
return sb;
}
}
关于如何实现块缩进有什么想法吗?
【问题讨论】:
-
您正在添加
\t,然后添加subLines。您没有说将subLines拆分为单独的行,并在每个 行的开头添加\t。也许您想要foreach (var line in subLines.Split("\n")) { mainLines.Append("\t").AppendLine(line); }之类的东西? -
StringBuilder 没有(自动)格式化功能,您必须自己构建它。现在,您正在添加一个 TAB 字符,然后是一堆对该 TAB 一无所知的行
-
@canton7 谢谢你,这就是我一直在寻找的东西,我为此创建了一个小扩展方法。如果您想将其发布为答案,我会接受。
-
@HansKesting:是的,你是对的。我理解它为什么这样做,但想看看框架中是否有任何可用的内置解决方案来实现结果。谢谢你:)
标签: c# string-formatting indentation