关于c#:C#6中的长字符串插值行不支持Tab,CR和LF

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

我试着用C 6中带制表符的字符串插值"$"

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

而且工作正常,标签也解决了。

尝试使用长字符串插值线时

1
2
3
4
5
6
7
      var name ="myname";
      var text = $@"\t\t{name}
                    tab and name  is in a Long string interpolation


      "
;
    Console.WriteLine(text);

输出

1
2
     \t\tmyname
                    tab and name  is in a Long string interpolation

选项卡 、
和未解析

所以我必须使用string.format()来解决这个问题。

问题:

对于不支持C 6(甚至C 7)中的
,这是否是长字符串插值的限制?


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

如果要使用制表符,请不要使用逐字字符串。可以使用字符串与"+"连接多行


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

1
2
3
4
5
6
7
    var name ="myname";
    var text = $@"{"\t\t"}{name}
            tab and name  is in a Long string interpolation {"


"}
"
;
    Console.WriteLine(text);

或者,因为它是一个逐字的字符串,所以您只需在字符串中需要这些字符的地方按tabkbbkd(或enterabkbbkd)键。

此字符串与上面的字符串相同:

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

"
;