首页 文章详情

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

DotNet NB | 86 2022-06-10 00:46 0 0 0
UniSMS (合一短信)


之前

我们经常需要使用 string 类型定义字符串文本,字符串文本用一对双引号括起来表示:

var str = "Hello MyIO";

字符串可包含任何字符文本,但是有些字符需要转义才能表示,比如双引号要转义成\"

var str = "{\"K\":\"V\"}";

如果需要将文本多行显示,则需要插入回车换行,并且回车换行符要转义成\r\n

var str = "{\r\n \"K\":\"V\" \r\n}";

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

var str = @"{
    "
"K"":""V""
}"
;

由于输出时会包含定义中的所有空格,所以在代码中不能将{}对齐

如果需要将字符串中的值用变量或表达式代替,可以用$将字符串文本标识为内插字符串:

var x = 1;
var y = 2;
var str = @$"
{{
    "
"K"":""{x+y}""
}}";

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

C# 11

原始字符串文本从 C# 11 开始可用。原始字符串文本可以包含任意文本,而无需转义。

原始字符串文本用至少三个双引号括起来:

var str = """{"K":"V"}""";

当起始双引号和结束双引号位于单独的行上时,开头双引号后面的换行符和结束双引号前面的换行符不包括在最终内容中。可以缩进原始字符串文本以匹配整体代码格式:

var str = """
        {
            "
K":"V"
        }
        "
"";

结束双引号指定字符串文本最左侧的列,前面的空格都会被忽略

当插入表达式时,需要用$$将字符串文本标识为内插字符串:

var x = 1;
var y = 2;
var str = $$"""
            {
                "
K":"{{x + y}}"
            }
            "
"";

{{}}作为内插表达式的一部分,表示为字符的{}无需转义

将定义原始字符串文本的代码反编译,可以看到,字符串其实还是使用的一对双引号括起来表示。原始字符串只是 C# 11  为我们提供的一个语法糖



推荐阅读:
  API 工程化分享
  我的微软 MVP 之路
【译】ASP.NET Core 6 中的性能改进
【译】.NET 7 预览版 1 中的 ASP.NET Core 更新
【译】C# 11 特性的早期预览

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2021开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter