最佳环境。内联字符串中的换行符

时间:2019-01-07 19:06:02

标签: c# string-interpolation

我想在字符串中插入多行新内容,因此我选择了内插字符串作为格式机制的选择,

示例:

string mystring = $"one line{Environment.NewLine}{Environment.NewLine}{Environment.NewLine}another line{Environment.NewLine}end";

现在可以正常工作,但是如何更好地在插值字符串中插入多个Environment.Newline;例如,如果我想15则很麻烦。

我知道string.Replace(string.Format()和串联Environment.NewLine + Environment.NewLine + Environment.NewLine以及带有空行的文字字符串@"stuff",但这不是问题(替代),而是如何插入倍数,例如我的

虚假示例

string mystring = $"one line{Environment.NewLine(3)}another line{Environment.NewLine}end text";

3 个答案:

答案 0 :(得分:2)

您可以编写一个简单的辅助方法来获取重复的字符串,然后调用该方法:

static string Repeat(string input, int count)
{
    var result = new StringBuilder();
    for (var i = 0; i < count; i++) result.Append(input);
    return result.ToString();
}

string mystring = 
    $"one line{Repeat(Environment.NewLine, 3)}another line{Environment.NewLine}end";

如果不想显式调用另一个函数,则可以编写扩展方法:

public static class Extensions
{
    public static string Repeat(this string input, int count)
    {
        if (input == null) return null;
        if (count < 1) return string.Empty;
        var result = new StringBuilder();
        for (var i = 0; i < count; i++) result.Append(input);
        return result.ToString();
    }
}

然后语法更简单:

string mystring = 
    $"one line{Environment.NewLine.Repeat(3)}another line{Environment.NewLine}end";

答案 1 :(得分:2)

Linq可以做到这一点:

var fifteenNewlines = string.Concat(Enumerable.Repeat(Environment.NewLine, 15));

答案 2 :(得分:1)

也许不是最优雅的解决方案,但是您可以从插值字符串中调用方法。该方法可以返回指定数量的新行。

private string NewLines(int lines)
{           
 return new StringBuilder().Insert(0,$"{Environment.NewLine}, lines").ToString();
}

然后打电话

string mystring = $"one line{NewLines(3)}another line{NewLines(1)}end text";