C# 各版本语法新功能汇总

C# 8.0 以后

官网

C# 7.3

》》in

在这里插入图片描述

C# 7.2

》》 命名参数、具名参数

在这里插入图片描述

》》》 条件 ref 表达式

在这里插入图片描述

C# 7.1

》》 default 运算符
default 在C#7.1中得到了改进,不再需要default(T)了

//变量赋值C#7.0
var s = "字符串"; 
s = default(string); C#7.1
var s = "字符串"; 
s = default;//初始化赋值
C#7.0
var dstring = default(string); 
var dint = default(int); 
var dintNull = default(int?); 
var d = default(dynamic); 
var dt = default(DateTime); 
var dt1 = default(DateTime?);C#7.1
string s = default; 
int i = default; 
DateTime? dt = default; 
dynamic d = default;//可选参数
C#7.0
void Test(int a, string b = default(string)) 
{
}C#7.1
void Test(int a, string b = default) 
{
}

》》》 元组功能提供了简洁的语法来将多个数据元素分组成一个轻型数据结构。
在这里插入图片描述

(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// Output:
// Tuple with elements 4.5 and 3.(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// Output:
// Sum of 3 elements is 4.5.

C# 7.0

》》类型模式
》》格式:expr is type varname, varname 是类型匹配后,赋值的变量名称。
在这里插入图片描述
》》常量模式
描述:用于测试表达式计算结果是否为指定的常数值。
格式:expr is constant,
constant 的可以是下面的表达式:

  1. 文字值。
  2. 一个枚举常量。
  3. 已声明 const 变量的名称。

》》var 模式 跟 》》类型模式 一样
描述:始终匹配成功,可将表达式的值绑定到新局部变量。
格式:expr is var varname
如果 expr 为 null ,is 表达式也为 true, varname 为 null。

static IEnumerable<int> Factor(int number){int max = (int)Math.Sqrt(number);for (int i = 1; i <= max; i++){if (number % i == 0){yield return i;if (i != number / i){yield return number / i;}}}}int[] testSet = { 22, 33, 44, 55};var primes = testSet.Where(n => Factor(n).ToList() is var factors&& factors.Count == 2&& factors.Contains(1)&& factors.Contains(n));

》》》Out 关键字

可以在out后面直接声明变量,例如前TryParse需要先定义再使用的两行的代码,现在一行即可: int.TryParse(s, out int num),从而简化语法。
在这里插入图片描述

》》 Tuples 元组

元组改进,可以为无组添加名称,用法:
方式1:定义:(int one, int two) tuple = (1, 2); 使用: WriteLine( " f i r s t : t u p l e . o n e , s e c o n d : t u p l e . t w o " ) ; 。方式 2 :定义: v a r t u p l e 2 = ( o n e : 1 , t w o : 2 ) ; 使用: W r i t e L i n e ( "first:{tuple.one}, second:{tuple.two}");。 方式2:定义:var tuple2 = (one: 1, two: 2); 使用: WriteLine( "firsttuple.one,secondtuple.two");。方式2:定义:vartuple2=(one:1,two:2);使用:WriteLine(“first:{tuple2.one}, second:{tuple2.two}”);。
在这里插入图片描述

》》》本地方法

在这里插入图片描述
在这里插入图片描述

》》 Ref
对ref引用进行了加强,现在可以引用一个方法中的局部变量,
语法是:在方法定义前加上 ref,同时在返回时也加上ref,
如定义函数

ref int GetDataRef(int[] data, int index)
{ 
return ref data[index];
} ref int num = ref GetDataRef(new data[]{1,2,3}, 0);

则 ref int num = ref GetDataRef(new data[]{1,2,3}, 0); 返回,对数组中第0个元素的引用。
在这里插入图片描述
》》 throw ,之前都说手动抛出异常,C# 7.0 引入了throw表达式

它允许我们在条件表达式中抛出异常。官方的解析说这对提高代码可读性有利。如:

在这里插入图片描述

》》》 数字文本语法改进 这个一般上位机用比较多
在这里插入图片描述

C# 6.0

》》Import of static type members into namespace
用于简化书写。在引用类名后,可以直接使用类的静态成员,
比如在使用 using static System.String; 后,
可以将 String.IsNullOrEmpty(str) 可以直接写成 IsNullOrEmpty(str)。
》》只读自动属性
只读自动属性提供了更简洁的语法来创建不可变类型。 你声明仅具有 get 访问器的自动属性:
public string FirstName { get; }
public string LastName { get; }
FirstName 和 LastName 属性只能在构造函数的主体中设置;
在这里插入图片描述

在这里插入图片描述

》》 自动属性初始化表达式

自动属性初始值设定项可让你在属性声明中声明自动属性的初始值。
public class Student
{
public string FirstName { get; } = “xxx”;
public string LastName { get; private set; } = “tttt”;
}
FirstName,LaseName 成员在声明它的位置处被初始化。 这样,就能更容易地仅执行一次初始化。 初始化是属性声明的一部分,可更轻松地将存储分配。

》》 Expression-bodied(正文表达式) 函数成员

你编写的许多成员是可以作为单个表达式的单个语句。 改为编写 expression-bodied 成员。这适用于方法和只读属性
在 C# 7.0 中,你可以在属性 和索引器 上实现构造函数 、终结器 以及 get 和 set 访问器
例如,重写 ToString() 通常是理想之选:
public override string ToString() => $“{LastName}, {FirstName}”;
也可以将此语法用于只读属性:
public string FullName => $“{FirstName} {LastName}”;

》》Null 条件运算符 断路运算符 ?

Null 条件运算符使 null 检查更轻松、更流畅。 将成员访问 . 替换为 ?.:
var first = person?.FirstName;
在前面的示例中,如果 Person 对象是 null,则将变量 first 赋值为 null。 否则,将 FirstName 属性的值分配给该变量。
最重要的是?. 意味着当 person 变量为 null 时,此行代码不会生成 NullReferenceException。
它会短路并返回 null。 还可以将 null 条件运算符用于数组或索引器访问。
将索引表达式中的 [] 替换为 ?[]。
first = person?.FirstName ?? “Unspecified”; //?? a??b 当a为null时则返回b,a不为null时则返回a本身。

》》字符串内插

使用 C# 6,新的字符串内插功能可以在字符串中嵌入表达式。
使用 $ 作为字符串的开头,并使用 { 和 } 之间的表达式代替序号:
public string FullName => $“{FirstName} {LastName}”;

》》异常筛选器

try{doSomething();
} catch(Exception e) when (e.Message.Contains("xx")){ProcessException(e);
} 
//等价于
catch (Exception e){if(e.Message.Contains("xx")) // 如果判断的逻辑较多,建议使用该方式。{return "Site Moved";}}

》》 nameof

Nameof是一个运算符,用于获取代码元素(如变量、类和方法等)的名称(是的,字符串)。
它通过将名称作为字符串文字返回来帮助您密切关注名称!

int myInt = 10;
Console.WriteLine(nameof(myInt)); // Output: “myInt”

在这里插入图片描述

》》索引器初始化关联集合, C# 3.0 集合初始化器
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3248414.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙基本工程目录

工程级目录 AppScope 中存放应用全局所需要的资源文件。entry 是应用的主模块&#xff0c;存放 HarmonyOS 应用的代码、资源等。oh_modules 是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5 是工程级配置信息&#xff0c;包括签名、产品配置等。hvigorf…

一文带你了解 GB 18030-2022 字符集

GB18030 全称《‌信息技术 中文编码字符集》‌&#xff0c;‌是我国信息技术领域的强制性国家标准之一&#xff0c;是中华人民共和国国家标准所规定的变长多字节字符集&#xff0c;字符以单字节、双字节或四字节编码。 当前执行标准为 GB 18030-2022&#xff0c;于 2023 年 8 月…

Linux·权限与工具(上)

1. shell命令以及运行原理 Linux严格意义上来说是一个操作系统&#xff0c;我们称之为 "核心(kernel)" &#xff0c;但我们一般的用户不呢个直接使用到核心&#xff0c;因为不会用。所以开发者在核心外面封装了一层 "外壳(shell)" 程序&#xff0c;来与核心…

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

VMware Vsphere创建虚拟机

作者&#xff1a;红米 一、上传系统镜像 1、打开数据中心 2、新建文件夹&#xff0c;存放镜像 3、点击上传文件按钮 4、找到本地镜像上传 二、安装虚拟机 1、创建虚拟机 2、选择创建类型 3、为虚拟机命名并选择虚拟机安装的所在位置 4、选择计算资源 5、选择存储 6、选择兼容…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…

什么是IoC控制反转思想?

目录 一.什么是IoC&#xff1f; IoC核心思想 一.什么是IoC&#xff1f; IoC&#xff08;Inversion of Control&#xff09;即控制反转&#xff0c;这里的控制是代表控制权的意思&#xff0c;IoC是一种编程思想&#xff0c;旨在降低代码之间的耦合度、降低代码的维护成本。…

算法力扣刷题记录 五十二【617.合并二叉树】

前言 二叉树篇&#xff0c;继续。 记录 五十二【617.合并二叉树】 一、题目阅读 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要…

算法day04 位运算 插入排序 二分法 对数器

位运算: 1&#xff09;有一个数组只包含这样的数&#xff0c;有几个数出现偶数次&#xff0c;有1个数出现奇数次&#xff0c;要求时间复杂度不超过o(n),怎么求出现奇数次的数。 使用 ^ 异或运算整个数组&#xff0c;偶数次运算结果为0&#xff0c;只留下最后一个奇数次的数。 …

【元器件】二极管、三极管、MOS管

二极管 D 二极管是一种具有两个电极&#xff08;即正极和负极&#xff09;的电子器件。它是一种非线性元件&#xff0c;具有许多重要的功能和应用 三极管 Q 概述 一种控制电流的半导体器件&#xff0c;其作用是把微弱信号放大成幅度值较大的电信号&#xff0c;也用作无触点开…

鸿蒙语言基础类库:【@system.prompt (弹窗)】

弹窗 说明&#xff1a; 从API Version 8 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.prompt]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import prompt from system.prompt;…

6个高效再利用的UI作品集设计模板

UI 作品集是指用户界面设计师的个人作品集。它展示了设计师的设计能力、技巧和风格&#xff0c;也是充分展示他们设计能力的证明。优秀的UI 作品集应具有简洁明了、美观大方、良好的互动体验和明确的目标。本文将从两个方面的介绍 Ui 作品集模板的全部内容&#xff1a;UI 作品集…

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞&#xff0c;Apache James&#xff0c;Kafka-UI 都爆了这几个洞&#xff0c;所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX&#xff08;Java Management Extensions&#xff0c;即 Java 管理扩展&#xff0…

叉车指纹一键启动/熄火车辆,“锁”住叉车安全

在现代工业领域&#xff0c;叉车作为重要的物流搬运工具&#xff0c;其安全性和便捷性一直是人们关注的焦点。为此&#xff0c;我们引入了一项技术——叉车指纹一键启动/熄火系统&#xff0c;真正实现了叉车安全的“锁定”。 这项技术不仅仅是简单的启动或关闭车辆的手段&#…

前端:Vue学习-2

前端&#xff1a;Vue学习-2 1. vue的生命周期2. 工程化开发和脚手架Vue CLI2.1 组件化开发2.2 scoped解决样式冲突2.3 data是一个函数2.4 组件通信2.5 非父子通信- event bus事件&#xff0c;provide&inject 3.v-model原理->实现父子组件双向绑定4. sync 修饰符->实现…

centos7 中tcp连接问题

centos对telnet过来的包没有响应 通过tcpdump查看到的TCP连接的不正常的报文&#xff0c;如下 通过tcpdump查看到的TCP连接的正常的报文 &#xff0c;如下 解决方法&#xff1a; cat /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_timestamps 如果两个参数…

【Java算法】前缀和 下

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 一.连续数组 题目链接&#xff1a;525.连续数组 代码 public int findMaxLength(int[] nums) {HashMap<Integer,Integer> mapnew HashMap<>();map.put(0,-1);…

【系统架构设计师】十三、软件可靠性(基本概念|软件可靠性建模)

目录 一、基本概念 1.1 定义 1.2 软件可靠性的定量描述 1.3 可靠性测试的意义 1.4 广义的软件可靠性测试和狭义的软件可靠性测试 二、软件可靠性建模 2.1 可靠性模型的组成 2.2 可靠性模型的共同假设 2.3 可靠性模型的重要特性 2.4 可靠性建模方法 往期推荐 历年真…

SD-WAN组网搭建5G备份方案实现方式

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;结合5G作为备份链路是现代企业网络弹性策略的一部分&#xff0c;尤其是在需要高可用性和快速故障切换的场景下。以下是实现SD-WAN组网并集成5G备份方案的一般步骤&#xff1a; 1. …

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码&#xff0c;但是对于单元测试这些反而觉得多此一举&#xff0c;想着我都在接口文档测过了&#xff01;还要写什么单元测试&#xff01;写不了一点&#xff01;&#xff01; 由于本人也是一个小小程序猿&#x1f649;&#xf…