我希望您能从C#编写一些HTML(HTML只是一个示例,可能有其他语言...)。
例如:
我们得到了正确缩进的HTML代码:
然后我可以像这样使用它:
返回正确的HTML代码:
例如:
string div = @"<div class=""className"">
<span>Mon text</span>
</div>";
将会产生:
<div class="className">
<span>Mon text</span>
</div>
从HTML的角度来看,这并不是很酷...
唯一的正确HTML缩进方式是像这样缩进C#代码:
string div = @"<div class=""className"">
<span>Mon text</span>
</div>";
我们得到了正确缩进的HTML代码:
<div class="className">
<span>Mon text</span>
</div>
但是像这样对 C# 进行缩进真的破坏了代码的可读性...
有没有一种方式可以在 C# 语言中处理缩进?
如果没有,那么是否有比以下方法更好的提示:
string div = "<div class=\"className\">" + Environment.NewLine +
" <span>Mon text</span>" + Environment.NewLine +
"</div>";
并且比之前更好
var sbDiv = new StringBuilder();
sbDiv.AppendLine("<div class=\"className\">");
sbDiv.AppendLine(" <span>Mon text</span>");
sbDiv.AppendLine("</div>");
我使用的解决方案:
特别感谢@Yotam的答案。
我写了一个小扩展程序,使对齐方式“动态”:
/// <summary>
/// Align a multiline string from the indentation of its first line
/// </summary>
/// <remarks>The </remarks>
/// <param name="source">The string to align</param>
/// <returns></returns>
public static string AlignFromFirstLine(this string source)
{
if (String.IsNullOrEmpty(source)) {
return source;
}
if (!source.StartsWith(Environment.NewLine)) {
throw new FormatException("String must start with a NewLine character.");
}
int indentationSize = source.Skip(Environment.NewLine.Length)
.TakeWhile(Char.IsWhiteSpace)
.Count();
string indentationStr = new string(' ', indentationSize);
return source.TrimStart().Replace($"\n{indentationStr}", "\n");
}
然后我可以像这样使用它:
private string GetHtml(string className)
{
return $@"
<div class=""{className}"">
<span>Texte</span>
</div>".AlignFromFirstLine();
}
返回正确的HTML代码:
<div class="myClassName">
<span>Texte</span>
</div>
其中一个限制是它只能使用空格缩进...
欢迎任何改进!