gpt4 book ai didi

c# - 作用于 c# 多行字符串的缩进

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:34 26 4
gpt4 key购买 nike

我想从 c# 写一些 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>

一个限制是它只适用于空格缩进...

欢迎任何改进!

最佳答案

您可以将字符串换行到下一行以获得所需的缩进:

    string div = 
@"
<div class=""className"">
<span>Mon text</span>
</div>"
.TrimStart(); // to remove the additional new-line at the beginning

另一个不错的解决方案(缺点:取决于缩进级别!)

        string div = @"
<div class=""className"">
<span>Mon text</span>
</div>".TrimStart().Replace("\n ", "\n");

它只是删除字符串中的缩进。确保 Replace 的第一个字符串中的空格数与缩进的空格数相同。

关于c# - 作用于 c# 多行字符串的缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com