字符串"/>
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新特性之原始字符串
发布评论