C#12預覽版釋出,新功能一覽

来源:https://www.cnblogs.com/xbhp/archive/2023/04/19/17332932.html
-Advertisement-
Play Games

概述 C#是微軟開發的一種流行的編程語言,廣泛用於開發桌面,Web和移動應用程式。在每個新版本中,C# 都會帶來令人興奮的功能和改進,使其更強大、更具表現力和更高效。C# 的最新版本是2022年發佈的 C#11,它引入了一系列新功能,例如abstract 和 virtual 引入到靜態方法中、泛型 ...


概述

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開發跳槽

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是R哥。 我的新書《Spring Boot 3 核心技術與最佳實戰》打磨一年多,今天終於上市了,定價 158 元,今天剛上市搞 5 折促銷,80 元不到上車,這可能是全網最便宜的時候了,機會難得,想擁抱 Spring Boot 3.0 的不要錯過。 文章還沒發,已經有老鐵粉絲上車了,真愛啊 ...
  • ###1.首先查詢出組織機構 就是一個簡單的查詢 List<Dept> deptList = mapper.getDeptList(); Map<Long, OrgNode> nodeMap = new HashMap<>(); List<Long> rootIds = new ArrayList< ...
  • 無畏併發 併發 Concurrent:程式的不同部分之間獨立的執行(併發) Parallel:程式的不同部分同時運行(並行) Rust無畏併發:允許你編寫沒有細微Bug的代碼,併在不引入新Bug的情況下易於重構 註意:本文中的”併發“泛指 concurrent 和 parallel 一、使用線程同時 ...
  • Object 類提供的 clone() 方法是 “淺拷貝”,並沒有克隆對象中引用的其他對象,原對象和克隆的對象仍然會共用一些信息。深拷貝指的是:在對象中存在其他對象的引用的情況下,會同時克隆對象中引用的其他對象,原對象和克隆的對象互不影響。 ...
  • 對象文件存儲服務(OSS)主要用於存儲零散的文件,和直接存儲到本地文件系統中相比,有以下的幾個優勢: 跨伺服器可用 相容Amazon S3 API 橫向擴容 高可用 支持加密 MinIO就是一個高性能的文件服務,我們使用.NET來操作一下。 部署MinIO 最簡單的辦法,就是在Docker上運行Mi ...
  • 最近在對某個後端服務做 .NET Core 升級時,裡面使用了多處處理 MultipartFormDataContent 相關內容的代碼。這些地方從 .NET Framework 遷移到 .NET Core 之後的代碼改動較大,由於本身沒有測試覆蓋,導致在部署 QA 環境後引發了一些問題。這裡做一個 ...
  • 引子 最近不知怎麼的,自從學了WebAPI(為什麼是這個,而不是MVC,還不是因為MVC的Razor語法比較難學,生態不如現有的Vue等框架,webapi很好的結合了前端生態)以後,使用別人的組件一帆風順,但是不知其意,突然很想自己實現一個基於的JWT認證服務,來好好瞭解一下這個內容。 起步 自從S ...
  • 由於當前社會人力成本越來越昂貴,機器取代人力是大勢所趨,自動化的發展也隨之越來越快 。當製造公司需 要一雙手和一對 眼睛的時候卻不得不雇佣一個人的苦惱日益加重,而傳統的機器設計和電氣自動化的發展,解決一雙手的問題已經漸漸得到了緩解,現在就到了需要解決一雙眼睛的時候,機器視覺的出現和廣泛應用也隨著到來 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...