C#6中的长字符串内插线不支持Tab,CR和LF

时间:2018-08-23 17:57:55

标签: c# c#-6.0 string-interpolation

我试图在带有标签的C#6中使用字符串插值$“”

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

它工作正常,并且选项卡\ t已解决。

尝试使用Long string interpolation lines

      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

2 个答案:

答案 0 :(得分:3)

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

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

的字符串连接来连接多行

答案 1 :(得分:1)

该字符串前面有逐字修饰符@,因此您的制表符不会被转义并视为普通文本。如果要将它们包括在字符串中,则可以将字符括在圆括号中(因为您还使用了$字符串插值修饰符),因此将它们视为制表符(与回车符相同)和换行符):

    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 

";