代码之家  ›  专栏  ›  技术社区  ›  Jeremiah Gowdy

C#6中的长字符串插值线

  •  154
  • Jeremiah Gowdy  · 技术社区  · 10 年前

    我发现,虽然字符串插值在应用于我现有代码库的字符串Format调用时非常好,但考虑到通常首选的列限制,字符串很快就变得太长,无法容纳一行。尤其是当插值的表达式很复杂时。使用格式字符串,可以将变量列表拆分为多行。

    var str = string.Format("some text {0} more text {1}",
        obj1.property,
        obj2.property);
    

    有没有人喜欢用什么方法来打破这些界限?

    我想你可以这样做:

    var str = $"some text { obj1.property }" +
      $" more text { obj2.property };
    
    5 回复  |  直到 4 年前
        1
  •  228
  •   Lasse V. Karlsen    10 年前

    可以 将该行拆分为多行,但我不会说语法看起来更好了。

    您需要使用 $@ 使用插值的语法 逐字的 字符串,并且可以在 {...} 参数,例如:

    string s = $@"This is all {
        10
        } going to be one long {
        DateTime.Now
        } line.";
    

    上面的字符串将不包含任何换行符,实际上将包含如下内容:

    这是所有10条将是一条长的2015年8月1日23.49.47线。

    (注,挪威格式)

    既然如此,我不会停止使用 string.Format 在我看来,这些字符串插值表达式中的一些看起来很好,但更复杂的表达式开始变得很难阅读。考虑到,除非你使用 FormattableString ,代码将编译为对 String.Format 无论如何,我会说继续 字符串.格式 这是有意义的。

        2
  •  66
  •   MarcinJuraszek    10 年前

    您可以组合 $ @ 一起获得字符串插值和多行字符串文字:

    var str = $@"some text { obj1.property }
         more text { obj2.property }";
    

    但这会给你一个 NewLine 性格介于两者之间,所以这可能不是你想要的。

        3
  •  28
  •   Colonel Panic    6 年前

    虽然OP问了一些其他问题,但我希望许多阅读此问题的人都希望使用多行插值 $"" 工作原理如下 @"" 。为此,请使用 $@""

    $@"Height: {height}
    Width: {width}
    Background: {background}"
    
        4
  •  4
  •   CallMeLaNN    9 年前

    这就是:

    var str = $"some text { obj1.property }" +
              $" more text { obj2.property }";
    

    注意第二个 $ $"..." + $"..."

        5
  •  1
  •   Christopher Govender    8 年前

    我在重写的ToString()中使用了StringBuilder作为示例。

        // return employee data
        public override string ToString()
        {
            StringBuilder buffer = new StringBuilder();
            buffer.AppendLine($"Number: {EmployeeNumber}");
            buffer.AppendLine($"Name: {EmployeeName}");
            buffer.AppendLine($"Address: {PostalAddress}");
            buffer.AppendLine($"Phone: {PhoneNumber}");
            buffer.AppendLine($"Age: {EmployeeAge}");
            buffer.AppendLine($"Gender: {EmployeeGender}");
            buffer.AppendLine($"Status: {EmployeeStatus}");
            buffer.AppendLine($"Manager: {EmployeeManager}");
            buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}");
            return buffer.ToString();
        }