C#6 中的长字符串插值行不支持 Tab、CR 和 LF

Long string interpolation lines in C#6 don't support Tab,CR and LF

我尝试在 C#6 中使用带制表符的字符串插值 $""

 var name="My Name";
 var text =$"\t\t{name}";

它工作正常,标签 \t 已解决。

当尝试使用

      var name = "myname";
      var text = $@"\t\t{name}
                    tab and name  is in a Long string interpolation \r\n
       ";
    Console.WriteLine(text);

输出

     \t\tmyname
                    tab and name  is in a Long string interpolation \r\n  

选项卡 \t 、\r 和 \n 未解析

所以我不得不使用 string.Format() 来解决这个问题。

问题:

C#6(甚至c#7)不支持\t \r \n,这是长字符串插值的限制吗

您在第二个示例中使用了逐字字符串,因此 \t 被转义了。与字符串插值无关

如果您想使用制表符,请不要使用逐字字符串。您可以使用 "+"

的字符串连接来连接多行

您在该字符串前面有逐字修饰符 @,因此您的制表符将被取消转义并被视为普通文本。如果你想将它们包含在字符串中,那么你可以将字符括在 curley 括号中(因为你还使用 $ 字符串插值修饰符)所以它们被视为制表符(与回车相同 return 和换行符):

    var name = "myname";
    var text = $@"{"\t\t"}{name}
            tab and name  is in a Long string interpolation {"\r\n"}
";
    Console.WriteLine(text);

或者,由于它是一个逐字字符串,您可以在需要这些字符的地方按 Tab(或 Enter)键细绳。

这个字符串与上面的相同:

    var text = $@"      {name}
            tab and name  is in a Long string interpolation 

";