查看原文
其他

C# 11 中的 Raw String Literal

DotNet 2022-07-19

The following article is from amazingdotnet Author WeihanLi

前言


C# 11 中将引入一个有意思的特性 —— Raw string Literal, 翻译一下就是原始的字符串字面值,是不是感觉有点绕,简单说就是字符串中的内容是什么就输出什么,不需要转义,看下面的示例应该就能明白了


示例

多行的文本,在之前的 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 的方式则需要两个,同样的对于参数原本只需要一对大括号 {} 现在也需要两对大括号才可以 {{}}输出结果和上面的相同


总结


对于这个新特性,我个人还是比较喜欢的,感觉还是比较方便的前面说的三个引号是一般情况下,如果你的内容里也有三个引号,那你可以使用4个引号甚至更多
var oh = """"
    Ok to use """ here
    """";
Console.WriteLine(oh);


- EOF -

推荐阅读  点击标题可跳转
C# 11 都有哪些新特性?C# 11 中的参数 null 检查C# 10的新特性


看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存