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://www.mzph.cn/web/46319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 算法:电话号码的字母组合 c++

原题链接&#x1f517;&#xff1a;电话号码的字母组合 难度&#xff1a;中等⭐️⭐️ 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 …

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由&#xff0c;参考了5.1 2.1、建了一个cloudGatewayDemo&#xff0c;这是用来配置网关的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 该接口代码如…

git clone命令, 克隆远程仓库

这个应该是最简单的命令&#xff0c;当别人扔给你一个*****.git链接&#xff0c;你要知道怎么用&#xff0c;但是还需要注意以下几点&#xff1a; 1. 你在该网站上是否有账号 2. 你在该网站上的账号是否是该项目的成员&#xff0c;如果不是&#xff0c;那可能clone不了 3. 本机…

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速&#xff0c;需要安装以下环境&#xff0c;下面将按以下顺序分别介绍安装、验证以及删除环境&#xff1a; #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom视频会议软件使用

Zoom是一款广受欢迎的视频会议软件&#xff0c;使用它可以轻松地进行远程会议、在线培训和团队协作等。要充分利用Zoom软件的功能&#xff0c;以下是详细具体的使用方法和步骤&#xff1a; 下载安装 下载&#xff1a;访问Zoom官方网站&#xff0c;根据使用的操作系统下载相应的…

ttkefu在线客服系统 机器人+人工客服 全渠道接入客户咨询

ttkefu在线客服系统是一种集成了机器人客服与人工客服&#xff0c;并支持全渠道接入客户咨询的综合解决方案。这种系统能够显著提升客户服务效率&#xff0c;优化客户体验&#xff0c;同时帮助企业降低运营成本 1. 智能机器人客服 自动回复&#xff1a;机器人客服能够自…

自制连点器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取码&#xff1a;yxo1

20.x86游戏实战-远线程注入的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring AI 应用开发中设置访问 Ollama 的超时时间

使用 Spring AI 开发 AI 应用时&#xff0c;Ollama 通常在本地开发和测试时使用&#xff0c;用来在本地运行大模型。由于本地开发机器的资源限制&#xff0c;当使用 Ollama 运行较大的模型时&#xff0c;大模型给出响应的时间会比较长。Spring AI 提供的 OllamaChatModel 与 Ol…

在Mac上免费恢复误删除的Word文档

Microsoft Word for Mac是一个有用的文字处理应用程序&#xff0c;它与Microsoft Office套件捆绑在一起。该软件的稳定版本包括 Word 2019、2016、2011 等。 Word for Mac 与 Apple Pages 兼容;这允许在不同的操作系统版本中使用Word文档&#xff0c;而不会遇到任何麻烦。 与…

【数据结构】非线性表----树详解

树是一种非线性结构&#xff0c;它是由**n&#xff08;n>0&#xff09;**个有限结点组成一个具有层次关系的集合。具有层次关系则说明它的结构不再是线性表那样一对一&#xff0c;而是一对多的关系&#xff1b;随着层数的增加&#xff0c;每一层的元素个数也在不断变化&…

逆向案例二十三——请求头参数加密,某区块链交易逆向

网址&#xff1a;aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析&#xff0c;发现请求头有X-Apikey参数加密&#xff0c;其他表单和返回内容没有加密。 直接搜索关键字&#xff0c;X-Apikey&#xff0c;找到疑似加密位置&#xff0c;注意这里…

零基础学习Python(三)

1. 多重继承 一个子类可以继承多个父类&#xff0c;这与一些编程语言的规则不通。 如果多个父类中有同名的变量和方法&#xff0c;子类访问的顺序是按照继承时小括号里书写的顺序进行访问的。 可以用issubclass(B, A)方法判断B是否为A的子类。 2. 绑定 类中的方法通过参数s…

《TF2.x强化学习手册》P59-P65-SARSA-Q-learning

文章目录 实现SARSA算法和对应的强化学习智能体前期准备实现步骤工作原理初始化算法流程 构建基于Q学习的智能体前期准备实现步骤工作原理SARSA 算法的收敛性&#xff1a;SARSA 适合在线学习和真实系统&#xff1a;Q 学习算法的适用性&#xff1a; 实现SARSA算法和对应的强化学…

HDC使用常见命令

HDC&#xff08;HarmonyOS Device Connector&#xff09;是为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 使用HDC前&#xff0c;需要配置相关环境变量&#xff1a; 在此电脑 > 属性 > 高级系统设置 &g…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

Github 2024-07-15 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-07-15统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目4JavaScript项目3TypeScript项目2Go项目1Solidity项目1Java项目1Rust项目1免费编程学习平台:freeCodeCamp.org 创建…

3.1-RNN存在的问题以及LSTM的结构

文章目录 1 RNN存在的问题1.1梯度消失问题1.2梯度爆炸问题1.3梯度爆炸的对策 2梯度消失的对策——LSTM2.1输出门2.2遗忘门2.3输入门2.4总结2.5 LSTM梯度的流动 1 RNN存在的问题 RNN存在梯度消失和梯度爆炸的问题。 书上以下图的这句话为例&#xff0c;进行说明&#xff1b;为了…

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言&#xff08;lookahead&#xff09;和后瞻断言&#xff08;lookbehind&#xff09;相信用过的小伙伴就知道它的威力了&#xff0c;在一些特定的需求场景下&#xff0c;可以做到四两拨千斤的作用&#xff0c;今天让我们来盘点一下在 JavaScript 正则表达…