Intro
C# 11 中将引入一个有意思的特性 —— Raw string Literal
, 翻译一下就是原始的字符串字面值,是不是感觉有点绕,简单说就是字符串中的内容是什么就输出什么,不需要转义,看下面的示例应该就能明白了.
Sample
多行的文本,在之前的 C# 版本中我们会使用 @
来进行声明,如下:
var testString = @"HTTP/1.1 200 OK
Connection: keep-alive
Date: Wed, 23 Mar 2022 14:05:03 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunked
X-dotnet-HTTPie-Duration: 720.0249ms
X-dotnet-HTTPie-ResponseTimestamp: 2022/3/23 22:05:03 +08:00";
在 C# 11 中我们可以使用三个引号 """
来声明,示例如下:
var testString = """
HTTP/1.1 200 OK
Connection: keep-alive
Date: Wed, 23 Mar 2022 14:05:03 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunked
X-dotnet-HTTPie-Duration: 720.0249ms
X-dotnet-HTTPie-ResponseTimestamp: 2022/3/23 22:05:03 +08:00
""";
Console.WriteLine(testString);
输出结果如下:
这似乎并不能体现它带来的好处,我们接着来看一个示例,一个格式化后的 Json 字符串,使用 @
的时候我们的字符串中有引号的话就需要进行转义,示例如下:
var rawJson = @"{
""name"": ""test"",
""age"": 10
}";
使用 C# 11 中的三个引号的方式进行声明就会简单很多,就会变成下面这样:
var rawJson = """
{
"name": "test",
"age": 10
}
""";
Console.WriteLine(rawJson);
这样在很多时候我们就可以直接赋值粘贴过来一段文本了,就不需要进行转义转换了,很多时候就会非常的方便了
上述输出结果如下:
不仅仅适用于多行,单行的文本也可以是可以用的,比如:
Console.WriteLine("""<div style="color:red">Amazing .NET</div>""");
从 C# 6.0 开始,开始支持字符串插值的写法,对于新的字符串声明方式也是支持字符串插值的,只是使用方式稍有不同,我们来看一个示例:
var interpolatedString = $$"""
{
"name": "test",
"age": {{10}}
}
""";
Console.WriteLine(interpolatedString);
在之前的字符串插值中,在字符串前只需要一个 $
,对于 Raw string literal
的方式则需要两个,同样的对于参数原本只需要一对大括号 {}
现在也需要两对大括号才可以 {{}}
输出结果和上面的相同
More
对于这个新特性,我个人还是比较喜欢的,感觉还是比较方便的
前面说的三个引号是一般情况下,如果你的内容里也有三个引号,那你可以使用4个引号甚至更多
var oh = """"
Ok to use """ here
"""";
Console.WriteLine(oh);