C#11新特性之原始字符串

编程入门 行业动态 更新时间:2024-10-10 07:32:29

C#11新特性之原始<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串"/>

C#11新特性之原始字符串

随着.NET 7与C#11的发布,微软发布了C# 11 中的原始字符串这个新特性。 这个新特性解决了祖传字符串中引号的问题。

微软官方的表述是:" Raw string literals",圈里都叫他”原始字符串”。从字面不难看出,它是适用于字符串的新特性,解决字符串中特殊字符的新语法。

原始字符串可以包含任意文本,包括空格、新行、嵌入的引号及其他特殊字符。

原始字符串至少以三个双引号"""字符开头,以相同数量的双引号字符结束。通常,原始字符串文字在一行使用三个双引号开始字符串,在另一行使用三个双引号结束字符串。

说了这么多,来看一个实际案例,假如有这么一个JSON字符串

{"id": 74,"coverImage": "/static/points/meituan.png","name": "30天骑行卡","price": "25","point": 2500,"companyName": "公司","description": "共享单车30天畅骑卡","expired": "2022年12月31日 23:59:59","attention": "所有解释权归公司所有"
}

过去与现在

  • 过去
  • 现在
    • 需要注意的问题
  • 总结

过去

在C#11之前,我们把他变成C#代码要这样写:

var JsonStr = "{\"id\": 74,\"coverImage\": \"/static/points/meituan.png\",\"name\": \"30天骑行卡\",\"price\": \"25\",\"point\": 2500,\"companyName\": \"公司\",\"description\": \"共享单车30天畅骑卡\",\"expired\": \"2022年12月31日 23:59:59\",\"attention\": \"所有解释权归公司所有\"}";
Console.WriteLine(JsonStr);

写成一行的话,代码的可读性太差了。为了让代码更有可读性,可以用原义标识符@定义字符串,这时大部分字符不需要转义,但是双引号要转义成""

var JsonStr = @"{""id"": 74,""coverImage"": ""/static/points/meituan.png"",""name"": ""30天骑行卡"",""price"": ""25"",""point"": 2500,""companyName"": ""公司"",""description"": ""共享单车30天畅骑卡"",""expired"": ""2022年12月31日 23:59:59"",""attention "": ""所有解释权归所有""
}";
Console.WriteLine(JsonStr);

这样使用起来没什么问题,但如果查看输出结果是这样的

多输出了很多无用空格(缩进),这是要活活逼死强迫症的感觉。

如果需要在字符串中使用差值表达式,可以用$将字符串文本标识为差值字符串,然后就变成了这样:

int point = 2500;
var JsonStr = @$"
{{""id"": 74,""coverImage"": ""/static/points/meituan.png"",""name"": ""30天骑行卡"",""price"": ""25"",""point"": {point},""companyName"": ""公司"",""description"": ""共享单车30天畅骑卡"",""expired"": ""2022年12月31日 23:59:59"",""attention "": ""所有解释权归公司所有""
}}";
Console.WriteLine(JsonStr);

需要注意的是:由于{}是差值表达式的一部分,所以表示为字符的{}需要转义成使用两个大括号{{}}

现在

有了原始字符串,一切都变的美好了起来。原始字符串文本从 C# 11 开始可用。原始字符串文本可以包含任意文本,而无需转义。
划重点:原始字符串文本用至少三个双引号括起来。也就是"""

我们来看第一个需求,一行的写法:

var JsonStr = """{"id":74,"coverImage":"/static/points/meituan.png","name":"30天骑行卡","price":"25","point":2500,"companyName":"公司","description":"共享单车30天畅骑卡","expired":"2022年12月31日 23:59:59","attention":"所有解释权归公司所有"}""";
Console.WriteLine(JsonStr);

非常的Nice,多行的写法:

var JsonStr = """{"id": 74,"coverImage": "/static/points/meituan.png","name": "30天骑行卡","price": "25","point": 2500,"companyName": "公司","description": "共享单车30天畅骑卡","expired": "2022年12月31日 23:59:59","attention": "所有解释权归公司所有"}""";
Console.WriteLine(JsonStr);

需要注意的问题

一行的写法,只需要在JSON字符串头尾加上"""就可以了,多行的时候,开头的"""和结尾的"""必须是单独占用一行,否则就会报错:


这里的独占一行,意思是开头,内容,结尾必须分开。
可以是这样的:

var JsonStr ="""..."""

也可以是这样的

var JsonStr ="""..."""

还有一个错误是这样的

大概意思是缩进不对,也就是说某一行没有跟开头的"""在同一列,但我看了半天也没看出来到到底哪不对。这是个什么意思?有知道的大神评论区指导一下吧。

如果JSON字符串中,一些值需要 "" 来引起来的话,改怎么办呢?很简单,只需要在需要加引号的值上,再加引号就可以了

Console.WriteLine(""" ""30天骑行卡"" """);

当需要使用差值字符串的时候,"""前面加$$就可以了。在JSON内部,差值表达式也需要使用{{}}括起来。代码长这个样子:

int point = 2500;
var JsonStr = $$"""{"id": 74,"coverImage": "/static/points/meituan.png","name": "30天骑行卡","price": "25","point": {{point}},"companyName": "公司","description": "共享单车30天畅骑卡","expired": "2022年12月31日 23:59:59","attention": "所有解释权归公司所有"}""";
Console.WriteLine(JsonStr);

总结

原始字符串是C# 11给我们提供的一个便捷的语法糖,可以让我们不在羡慕JS的"```"标识符了。.NET 7和C# 11的更多新功能,还需继续探索,也希望.NET 越来越好。

更多推荐

C#11新特性之原始字符串

本文发布于:2024-02-07 06:11:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753738.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   新特性   原始

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!