随着.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": "所有解释权归公司所有" }
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);
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);
这里的独占一行,意思是开头,内容,结尾必须分开。
可以是这样的:
var JsonStr =""" ... """
也可以是这样的
var JsonStr = """ ... """
还有一个错误是这样的
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);