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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...