代码之家  ›  专栏  ›  技术社区  ›  Mark Schultheiss

最佳环境。插值字符串中的换行符[重复]

  •  0
  • Mark Schultheiss  · 技术社区  · 6 年前

    我想在一个字符串中插入多个新行,所以我使用了一个插值字符串作为格式机制的选择,这应该非常快。

    例子:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Rufus L    6 年前

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

    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";
    
        2
  •  2
  •   Dour High Arch    6 年前

    LINQ可以做到这一点:

    var fifteenNewlines = string.Concat(Enumerable.Repeat(Environment.NewLine, 15));
    
        3
  •  1
  •   Josh Whitmer Jack Whipnert    6 年前

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

    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";