广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#11新特性使用案例详解
  • 567
分享到

C#11新特性使用案例详解

2024-04-02 19:04:59 567人浏览 安东尼
摘要

目录前言新特性之原始字符串使用案例原始字符串使用需要注意的地方什么情况下需要超过三个双引号开头尾引号和尾引号前面的换行符不包括在最终内容中结尾的三个引号不另起一行行不行和内插字符一起

前言

在日常开发中我们经常会将JSON、XML、htmlsql、Regex等字符串拷贝粘贴到我们的代码中,而这些字符串往往包含很多的引号",我们就必须将所有引号逐个添加转义符\进行转义。这个转义十分麻烦,且容易出错,而当我们们需要替换这些字符串时,重新粘贴进来的文本仍需要再次进行转义,简直让人崩溃。

在我的工作中经常会遇到这么一个场景,对于某核心业务的方法,业务执行前一般会进行日志输出参数对象(json格式),这样可在业务出现故障时追溯到当时的参数值,有利于事后补偿或复现bug等。假设故障发生了,我从日志中获取了这个参数值的内容如下

{
    "kpzdbs": "YJ2",
    "jqbh": "499098528334",
    "fplxdm": "026",
    "fpqqlsh": "ZJBX965525",
    "kplx": 0,
    "tspz": "00"
}

为复现该问题,在控制台或单元测试中,将该参数定义,并调用MyLogic方法,

可以看到报错的字符串是我直接从日志中拷贝的json粘贴进去的,需要对所有的"进行转义,这是很蛋疼的一个问题,有时候可能需要将很多日志中的对象粘贴进来测试,每次粘贴完还要进行插入转义符号

现在我们不需要这样做了。

新特性之原始字符串

原始字符串文本是字符串文本的新格式。原始字符串文本可以包含任意文本,包括空格、新行、嵌入引号和其他特殊字符,而无需转义序列。原始字符串文本以至少三个双引号开头, (""") 个字符。它以相同数量的双引号字符结尾。通常,原始字符串文本在单个行上使用三个双引号来启动字符串,另一行的三个双引号结束字符串。尾引号和尾引号前面的换行符不包括在最终内容中。

详细内容参考这里

使用案例

我使用这一新特性修改上面场景中的代码如下,可以看到,json字符串不做任何转义直接粘贴进来即可。

又比如我需要粘贴一段html,如果没有这新特性,转义那么多引号,你可能会疯吧!!

原始字符串使用需要注意的地方

以至少三个双引号 ("""...""") 开头和结尾,任何数量小于打开原始字符串文字的数量的双引号都被视为内容。

尾引号和尾引号前面的换行符不包括在最终内容中。

原始字符串文本通常在单个行上使用三个双引号来启动字符串,另一行的三个双引号结束字符串。

可以和$(可有多个)内插字符串一起使用,前缀$的数量是指示嵌套代码表达式所需的花括号的数量。如果原始字符串文字以$$为前缀,则将单个大括号视为内容,并且需要两个大括号来指示嵌套代码。就像使用引号一样,您可以添加更多$以允许将更多大括号视为内容。

什么情况下需要超过三个双引号开头

当字符串的内容中包含至少三个"一起出现,你的连续出现"的个数加1(最少三个),就是原始字符串要开头和结尾使用"的个数,所以说不是固定三个"注意:图中字符串前面的|并不是输入的字符,是编译器的对齐提示。

输出

尾引号和尾引号前面的换行符不包括在最终内容中

如下如,编译器自动以结尾""""前为界限显示出一条竖线,竖线左侧的空格不算作内容。

结尾的三个引号不另起一行行不行

将结尾字符放到内容后面,编译器会提示你将其放到自己的行上

这个可以理解为,在这种情况下可能会引起歧义,编译器不确定你的原始字符串是以下三种的哪一种。

如果下面这样,则不会歧义,以箭头指向的竖线为界,左侧空格都不算做内容,右侧空格均算作内容

如果是全在一行也行,因为不会产生歧义。

和内插字符一起使用

这个比较难理解点,$符号的数量也是不固定的,根据你需要连续将多少个花括号作为原始字符你想要输出的内容没有括号时,属于常规用法,没什么好说的。

如果你想输出下文

{张三}

会遇到这个问题的提示

简单理解就是,你需要将一个大括号视作内容,就需要两个$作为前缀,你需要将n个括号是做内容,就需要n + 1个$做为前缀,同样内插字符串也需要消耗跟$同样数量的大括号。因为你要将一个大括号视为内容,所以需要1 + 1 = 2个$,同样,内插变量也需要跟$数量一致的括号包裹,所以修改后的代码如下。

如果你想输出的内容是

{{{{张三

需要将四个括号视为内容,n = 4,$数量为4 + 1 = 5,内插变量也需要5和括号包裹。

总结

当我们将带有引号的文本粘贴至编译器中需要进行大量的转义操作,原始字符串特性能很好的解决这个问题,让我们可以愉快进行粘贴这些字符串,但当与内插字符串使用时,尤其是多个大括号场景还是比较难以理解的,好在编译器会提示怎么做,且那种场景都属于极其不常见。

以上就是C#11新特性使用案例详解内容,更多关于C#11新特性的资料请关注编程网其它相关文章!

--结束END--

本文标题: C#11新特性使用案例详解

本文链接: https://www.lsjlt.com/news/148816.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#11新特性使用案例详解
    目录前言新特性之原始字符串使用案例原始字符串使用需要注意的地方什么情况下需要超过三个双引号开头尾引号和尾引号前面的换行符不包括在最终内容中结尾的三个引号不另起一行行不行和内插字符一起...
    99+
    2022-11-13
  • C++11新特性“=default”,“=delete”的使用
    1、 =default 和=delete 概述 任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值。C++在不断的演变与发展,与此同时,伴随着...
    99+
    2022-11-12
  • C++11新特性之变长参数模板详解
    目录C++11 变长参数模板变长函数参数包如何解参数包sizeof()获得函数参数个数递归模板函数变参模板展开结论C++11 变长参数模板 在C++11之前,无论是类模板 还是函数...
    99+
    2022-11-12
  • C++11新特性之随机数库(Random Number Library)详解
    目录从前的随机数随机数库(Random Number Library)随机数引擎随机数分布类生成平均分布的整数生成平均分布的实数生成正态分布的实数生成概率可控的布尔值补充:真正的随机...
    99+
    2022-11-13
  • C++11、C++14、C++17、C++20常用新特性
    目录C++11C++14C++17C++20C++11 自动类型推断(auto关键字):C++11引入了auto关键字,可以根据变量初始值自动推导出变量类型。例如: auto i =...
    99+
    2023-03-10
    C++11 C++14 C++17 C++20 新特性
  • C++11新特性之右值引用与完美转发详解
    目录一、左值与右值二、左值引用与右值引用三、右值引用应用1.移动构造与移动赋值1.模拟实现的string2.移动构造3.移动赋值四、默认移动构造和移动赋值重载函数五、完美转发1.万能...
    99+
    2022-11-13
  • C++11中新特性“=default”,“=delete”如何使用
    小编给大家分享一下C++11中新特性“=default”,“=delete”如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、 =default 和=de...
    99+
    2023-06-15
  • C#11新特性预览及使用介绍
    目录C# 11 预览:允许在内插字符串的“插值表达式”中换行C# 11 预览:列表模式C# 11 预览:新的参数空值检查如何尝试预览特性.NET 首席项目经理...
    99+
    2022-11-13
  • JDK19新特性使用实例详解
    目录前提新特性列表新特性使用详解Record模式Linux/RISC-V移植外部函数和内存API虚拟线程向量APIswitch匹配模式结构化并发前提 JDK19于2022-09-20...
    99+
    2022-11-13
  • C++11新特性“=default”,“=delete”怎么用
    这篇文章主要介绍了C++11新特性“=default”,“=delete”怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、 =default 和=delete 概述任...
    99+
    2023-06-15
  • C++11、C++14、C++17、C++20常用新特性有哪些
    这篇文章主要介绍“C++11、C++14、C++17、C++20常用新特性有哪些”,在日常操作中,相信很多人在C++11、C++14、C++17、C++20常用新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-05
  • PHP8新特性之JIT案例讲解
    PHP8 alpha1已经在昨天发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样? 首先,我们来看一张图: 左图是 PHP 8之前的Opcac...
    99+
    2022-11-12
  • C# PropertyGrid使用案例详解
    1. 只有public的property能显示出来,可以通过BrowsableAttribute来控制是否显示,通过CategoryAttribute设置分类,通过Descripti...
    99+
    2022-11-12
  • C# AttributeUsage使用案例详解
    C# AttributeUsage的使用是如何的呢?首先让我们来了解一下什么是AttributeUsage类它是另外一个预定义特性类,AttributeUsage类的作用就是帮助我们...
    99+
    2022-11-12
  • C# log4net使用案例详解
    这边先介绍简单的使用:在控制台输出和写入文件 首先添加log4net的nuget包 然后在app.config中添加配置项==configSections只能有一个,且是config...
    99+
    2022-11-12
  • Java8新特性StreamAPI实例详解
    目录Stream结果收集结果收集到集合中结果收集到数组中对流中的数据做聚合计算对流中数据做分组操作对流中的数据做分区操作对流中的数据做拼接并行的Stream流串行的Stream流并行...
    99+
    2022-11-13
    Java8新特性 StreamAPI Java8 StreamAPI
  • C++11各种锁的使用案例
    小编给大家分享一下C++11各种锁的使用案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mutex(互斥锁)什么是互斥量(锁)?这样比喻:单位上有一台打印机(共...
    99+
    2023-06-20
  • C++11 constexpr使用详解
    目录1.constexpr初探2.constexpr修饰函数的限制3.使用编译时对象4.constexprvsconst的区别C++11为了提高代码执行效率做了一些改善。这种改善之一...
    99+
    2022-11-12
  • C++11新特性之列表初始化的具体使用
    目录统一的初始化方法列表初始化的一些使用细节初始化列表1、任何长度的初始化列表2、std::initialzer-list的使用细节列表初始化防止类型收窄在我们实际编程中,我们经常会...
    99+
    2022-11-13
  • Java8新特性之Collectors.joining()实例详解
    目录方法定义无参方法单个参数多个参数如果流中的数据是字符串如果流中的数据是对象总结方法定义 Java 8 流 ( stream ) 收集器 ( Collectors ) 中的&nbs...
    99+
    2023-01-12
    java8新特性collectors.joining() java8 collectors.joining()
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作