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

news2024/9/20 7:51:45

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.coloradmin.cn/o/1933653.html

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

相关文章

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(六)

一、MD5算法分析 &#xff1a; 1.1 关于MD5 “消息摘要”是指MD5&#xff08;Message Digest Algorithm 5&#xff09;算法。MD5是一种广泛使用的密码散列函数&#xff0c;它可以生成一个128位&#xff08;16字节&#xff09;的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

某大型企业产品研发管理体系构建指南解决方案

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

MySQL学习记录 —— 이십사 MySQL连接层和服务层

文章目录 1、整体架构2、连接层1、网络端口和连接管理线程2、客户端连接线程管理3、连接量管理 3、服务层1、服务管理和公共组件2、NoSQL接口与SQL接口以及Parser语法分析器3、优化器和缓存 4、SQL语句执行流程 1、整体架构 MySQL8.0服务器是由连接池、服务管理工具和公共组件…

BIOMOD2 物种分布模拟教程

原文链接&#xff1a;BIOMOD2 物种分布模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609373&idx5&sn492e7597314a5f9e358c35e4780b275f&chksmfa826dfacdf5e4ecf8ac06bdeba5469b31650bdbefbc8fb88b79c0f332714c453a4cc058d29f&token155…

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…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件&#xff0c;以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host&#xff1a;指定数据库服务器的主…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查&#xff0c;我下面的服务器有漏洞&#xff0c;不得已重装了&#xff0c;正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版&#xff0c;就是管理python环境的得力助手。 # 创建一个名…

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…

TDC 5.0:多集群统一纳管,构建一体化大数据云平台

近期&#xff0c;星环科技数据云平台Transwarp Data Cloud&#xff08;简称TDC&#xff09;5.0版本正式发布&#xff0c;TDC5.0架构屏蔽底层多个TDH集群的差异&#xff0c;采用统一操作模式&#xff0c;新增一个多集群抽象与管理层&#xff0c;能够实现多集群网络互通、跨集群资…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束&#xff08;primary key&#xff09;唯一约束&#xff08;unique key&#xff09;非空约束检查约束&#xff08;check&#xff09;外键约束&#xff08;foreign key&#xff…

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH) 1、配置分机 点击分机 -> 找到你需要设置的分机 ->呼叫路由设置为external&#xff0c;这里需要设置的分机是呼叫的并不是坐席的分机呼叫路由 2、配置拨号方案 点击拨号方案 -> 输入目的地绑定 …

C#实战 | 求解《丘建算经》百鸡问题

谈起古代数学&#xff0c;总会想起古希腊欧几里得的名著《几何原本》。而实际上&#xff0c;中国的《周髀算经》《九章算术》《缉古算经》等同样经典&#xff0c;尤其是《九章算术》&#xff0c;更以其算法实用性闻名世界。 中国古代数学的一些发展成果可谓惊艳&#xff0c;足…

不入耳耳机哪个牌子好用?五款卓越精品,小白必看!

怎么选到一款自己满意的开放式耳机&#xff1f;对于刚接触开放式耳机的朋友们来说&#xff0c;耳机的音质、续航、佩戴舒适度都是需要考虑到的&#xff0c;但是普通人往往很难去全面的了解分析耳机的这些性能配置。不入耳耳机哪个牌子好用&#xff1f;为了帮助大家解决这个难题…

Redis三种常用的缓存读写策略

Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 现在基本都用这个模式 Cache Aside Pattern 中服务端需要同时维系 db 和 cache&#xff0c;并且是以 db 的结果为准。 读写步骤&#xff1a; 写&#xff1a; 先更新 db&#xff0c;然后直接删除 cache 。 读 : …

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证&#xff08;PostgreSQL Certification&#xff09;在工作上有以下几个好处&#xff1a; 增强专业能力&#xff1a;通过考证&#xff0c;可以系统地学习和掌握 PostgreSQL 数据库的知识和技能&#xff0c;提高自己的专业水平。 提升职业竞争力&#xff1…

Vue.js 生命周期详解:从创建到销毁的全过程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

leetcode_189. 轮转数组

leetcode_189. 轮转数组 题目描述: 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…

炎炎夏日 凉凉机房

夏季高温即将到来&#xff0c;温度过高&#xff0c;电梯故障频发。机房温控方式除了加装空调之外&#xff0c;您还知道其他的方式吗&#xff1f; 小伍告诉您一个小妙招&#xff1a;为电梯加装节能设备&#xff0c;小小机器大大能量。 通常电梯在轻载上行&#xff0c;重载下行和…

全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”成功举办

为进一步深化现代职业教育体系建设理论研究&#xff0c;丰富行业产教融合共同体实践探索&#xff0c;7月13日&#xff0c;全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院&#xff08;广东青年职业学院&#xff09;第一届“求是论坛”在广东行政职业学院&…

Apache Paimon 在蚂蚁的应用

摘要 &#xff1a;本文整理自 Apache Paimon Committer 闵文俊老师在5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下四个部分&#xff1a; 什么是 Paimon蚂蚁 Paimon 应用场景蚂蚁 Paimon 功能改进未来规划 一、什么是 Paimon 1. 实时更新 Paimon 是…