首页 > 编程语言 >C#12预览版释出,新功能一览

C#12预览版释出,新功能一览

时间:2023-04-19 12:45:36浏览次数:55  
标签:12 obj 预览版 C# 改进 参数 表达式

概述

C#是微软开发的一种流行的编程语言,广泛用于开发桌面,Web和移动应用程序。在每个新版本中,C# 都会带来令人兴奋的功能和改进,使其更强大、更具表现力和更高效。C# 的最新版本是2022年发布的 C#11,它引入了一系列新功能,例如abstract 和 virtual 引入到静态方法中、泛型 attribute等。现在,微软已经在开发下一个版本的C#,那就是C# 12,它有望为该语言带来更多令人兴奋的功能和改进。

在本文中,我们将先睹为快,了解目前为 C# 12 提供预览版的一些新功能。以下是主要的新特性,本文将介绍其中一部分。

  1. Record structs

  2. 作为格式字符串的内插字符串

  3. Lambda对类方法委托类型的支持

  4. 对顶级的programs中static关键字的改进

  5. 简化参数空检查

  6. 支持匿名记录类型

  7. 改进了nameof。

  8. 改进了Switch 表达式

1、改进的Switch表达式

Switch表达式是在 C# 8 中引入的,允许开发人员简洁易读地表达复杂的条件逻辑。C# 12 跟进一步改进了Switch表达式,引入新的模式匹配,使编写的代码更简洁和更易于访问。

Switch表达式之前的方式

var result = obj switch
{
    int i when i > 0 => "Positive",
    int i when i < 0 => "Negative",
    _ => "Zero"
};

此代码使用 switch 表达式来确定整数是正数、负数还是零。当关键字用于引入必须匹配才能执行相应大小写的模式时。在 C# 12 中,我们可以使用新的模式匹配语法进一步简化此代码,

var result = obj switch
{
    > 0 => "Positive",
    < 0 => "Negative",
    _ => "Zero"
};

此语法允许我们省略 when 关键字并直接在switch 表达式中使用关系运算符。

2、属性和方法改进

C# 12 引入了对属性和方法的多项改进,使它们更具表现力和灵活性。

属性初始值设定项

属性初始值设定项允许我们在声明属性时设置属性的默认值。在 C# 12 中,我们现在可以使用构造函数来初始化属性,从而更轻松地设置复杂对象。

class MyClass
{
    public int MyProperty { get; set; } = 42;

    public MyClass()
    {
        // Other constructor code
    }
}

3、扩展方法

扩展方法允许我们向现有类添加新方法,而无需修改类。在 C# 12 中,我们现在可以使用扩展方法向接口添加方法,从而更轻松地编写可重用的代码。

interface MyInterface
{
    void Method1();
}

static class MyExtensions
{
    public static void Method2(this MyInterface obj)
    {
        // Method implementation
    }
}

class MyClass: MyInterface
{
    public void Method1()
    {
        // Method implementation
    }
}

var obj = new MyClass();
obj.Method1();
obj.Method2();

4、Lambda改进

Lambda 是 C# 中一个强大的功能,它允许我们编写简洁而富有表现力的代码。在 C# 12 中,lambda 通过引入多项改进变得更好。

隐式类型化 Lambda

在 C# 12 中,我们现在可以在 lambda 中使用隐式类型,使它们更加简洁易读。

List<int> numbers = new() { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);

在此代码中,我们使用隐式类型化的 lambda 表达式

5、简化参数空检查

当然,下面是使用 C# 12 预览版的参数空检查新功能,示例如下:

public void ExampleMethod(string? parameter1, string? parameter2)
{
    // Parameter null checking using the new '!' operator
    parameter1! ?? throw new ArgumentNullException(nameof(parameter1));
    parameter2! ?? throw new ArgumentNullException(nameof(parameter2));
    // Rest of the method logic goes here...
}
 //欢迎公众号:DOTNET开发跳槽,领取海量面试题

在上面的示例中,!运算符用于在继续执行方法逻辑的其余部分之前对parameter1  和parameter1 参数进行 null 检查。如果任一参数为 null,则会抛出一个 ArgumentNullException,并将参数名称作为异常消息。

注意。 在参数名称后使用 “!” 运算符,告知编译器参数在代码中的值不为 null。如果参数为 null,则执行 throw 语句,并且该方法立即退出而不执行任何进一步的逻辑。

原文链接:****https://www.c-sharpcorner.com/article/c-sharp-12-preview-features/

社群 
    同时为了增进大家的交流学习,小编建立了群组织,群文件夹会不定期发送干货,欢迎大家加入,QQ群号如下:
北京:
群1:219690210,群2:377501688,群3:262827065 ,群4:656219893
成都:209844460    杭州:338200466  上海:376029918   广州:344744167
深圳:542733289    西安:617850050

来源公众号:DotNet开发跳槽

标签:12,obj,预览版,C#,改进,参数,表达式
From: https://www.cnblogs.com/xbhp/p/17332932.html

相关文章

  • taro3 报错 TypeError: className.split is not a function
    项目原来跑的好好的,昨天升级了几个包,引用了个UI库,然后今天上班运行项目就跑不起来了,项目是在旧的项目上升级的之前的写法<Viewkey={idx}className={["tabbar-item",isActive&&"active"]}onClick={this.switchTab.bind(this,item.key)}>{......
  • 直击关于Docker所必须了解的知识
    云原生的核心技术之一就是容器,很多人会以为Docker等于容器,其实Docker并不等于容器。其实容器可以理解为:cgroups(资源控制)+namespaces(访问隔离)+rootfs(文件系统)+engine(容器生命周期管理)。容器与虚拟机的区别系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每个计......
  • DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍
    DeepSpeedChat:一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍1.概述近日来,ChatGPT及类似模型引发了人工智能(AI)领域的一场风潮。这场风潮对数字世界产生了革命性影响。ChatGPT类模型具有惊人的泛用性,能够执行归纳、编程、翻译等任务,其结果与人类专家相当甚至更优。为......
  • pycharm中运行js文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in
      在做有道翻译时发现python文件中调用js文件并读取,出现了UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xafinposition205:illegalmultibytesequence报错。其实修改很简单,我们只需要将subprocess.py文件Popen类属性中的enconding='None',改为enconding='utf-8'就可......
  • 提高rust的crates构建速度
    一直以来rust的crates构建速度都比较慢,因为rust把crates库的索引保存到了GitHub上面(https://github.com/rust-lang/crates.io-index)。而国内访问GitHub速度比较慢,其次是下载crates依赖时,是要完全同步这个仓库才能执行下一步的。即使你只需要下载一个库,也要先同步整个GitHub re......
  • C#中关于地址的不同写法及区别
    1.根目录stringselectedPath=AppDomain.CurrentDomain.BaseDirectory+"temp\\MaterialFiles";if(!File.Exists(selectedPath)){System.IO.Directory.CreateDirectory(selectedPath);//不存在就创建目录......
  • code
    #include"mainwindow.h"#include"ui_mainwindow.h"#defineLED_ONsetStyleSheet("background-color:lightGreen;")#defineLED_OFFsetStyleSheet("background-color:lightBlack;")MainWindow::MainWindow(QWidget*......
  • APISIX Ingress 如何使用 Cert Manager 管理证书
    ApacheAPISIXIngressController是一款以ApacheAPISIX作为数据面的KubernetesIngressController开源工具,目前已经更新到v1.3版本,实现了如证书管理、负载均衡、金丝雀发布等功能。长久以来,证书管理都不是一件简单的事情,虽然ApacheAPISIXIngressController支持从......
  • C++小型公司工资管理系统[2023-04-19]
    C++小型公司工资管理系统[2023-04-19]小型公司工资管理系统要求:1.公司主有4类人员:经理、技术员、销售员、销售经理。要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。2.工资的计算方法:a、经理:固定月薪为8000;b、技术员:工作时间*小时工资(100元每小时);c、销售员:销......
  • centos7设置定时任务重启tomcat
    1、确认crontab是否安装crontab-l//返回nocrontabforroot,表示已安装2、生成重启tomcat文件vimtomcatStart.sh#!/bin/bash/etc/profileecho$JAVA_HOME#这里取jdk路径exportJAVA_HOME=/usr/java/jdk1.8.0_191#这里取tomcat路径tomcatPath="/data2/webapp/apache-tomcat-8......