C# 11 中的新增功能

2022-12-07

我们很高兴地宣布 C# 11 已经发布!与往常一样,C# 开辟了一些全新的领域,同时推进了过去版本中一直在运行的几个主题。我们的文档页面上的 C# 11 的新增功能下有许多功能和详细信息,这些内容都得到了很好的介绍。


随着每个版本的发布,社区的参与度越来越高,他们贡献了从建议、见解和 bug 报告一直到整个功能实现的所有内容。这真的是每个人的C#。谢谢!



UTF-8字符串文字

默认情况下,C# 字符串被硬编码为 UTF-16,而互联网上流行的字符串编码是 UTF-8。为了最大限度地减少转换的麻烦和性能开销,您现在只需将 u8 后缀附加到字符串文字即可立即将它们转换为 UTF-8:


var u8 = "This is a UTF-8 string!"u8;

UTF-8 字符串文字简单地返回一个字节块——以 ReadOnlySpan<byte> 的形式。对于 UTF-8 编码很重要的场景,这可能比某些专用的新 UTF-8 字符串类型更有用。



原始字符串文字


字符串文字中的很多内容都是某种“代码”——不仅是程序文本,还有 JSON 和 XML 数据、HTML、正则表达式、SQL 查询等。当有许多特殊字符在 C# 字符串文字中具有特殊含义时,问题就会显现!值得注意的例子包括 \ 和 ",它们由 { 和 } 连接到内插字符串中。


为什么不采用一种完全没有转义字符的字符串文字形式呢?这就是原始字符串文字。


原始字符串文字至少由三个双引号分隔:

var raw1 = """This\is\all "content"!""";
Console.WriteLine(raw1);


This prints:


This\is\all "content"!


如果您需要三个或更多的“作为内容的一部分,您只需在外部使用更多的”。开头和结尾必须匹配:


var raw2 = """""I can do ", "", """ or even """" double quotes!""""";


这使得粘贴、维护和阅读文字包含的内容变得非常容易。

多行原始字符串文字也可以截断前导空格:结束引号的位置决定了输出中开始包含空格的位置:

var raw3 = """
    <element attr="content">
      <body>
        This line is indented by 4 spaces.
      </body>
    </element>
    """;
//  ^white space left of here is removed



由于右引号左侧有四个空格,因此从每行内容的开头删除四个空格,导致以下输出:


<element attr="content">
  <body>
    This line is indented by 4 spaces.
  </body>
</element>

原始字符串文字远不止于此——例如,它们支持字符串内插! 






摘自:

https://blog.csdn.net/helendemeng/article/details/128197262


联系信息

QQ:1827566828
Email: 1827566828@qq.com
Web: https://www.yynet.wang

留言