国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
理解默認(rèn)不可空的設(shè)計(jì)哲學(xué)
使用?明確表示允許為空的情況
啟用和配置可空上下文的方式
避免誤判的小技巧
首頁 後端開發(fā) C#.Net教程 在現(xiàn)代C#中處理無效的參考類型

在現(xiàn)代C#中處理無效的參考類型

Jul 08, 2025 am 01:08 AM
c#

啟用可空上下文後引用類型默認(rèn)不可空,1. 使用string? 明確允許為null 的情況,適用於數(shù)據(jù)庫字段、API 可選屬性等,2. 啟用方式為項(xiàng)目文件設(shè)置<nullable>enable</nullable> 或單個(gè)文件使用#nullable enable,3. 利用[MaybeNull]、[MemberNotNull] 等特性避免誤判,4. 通過null 檢查或! 操作符輔助編譯器推斷變量非空狀態(tài),從而提前發(fā)現(xiàn)潛在空值問題並提升代碼健壯性。

Handling Nullable Reference Types in Modern C#

在現(xiàn)代C# 中處理可空引用類型,核心是利用編譯器幫助我們提前發(fā)現(xiàn)潛在的空值問題。 C# 8 引入了可空上下文(nullable context)和可空註解(nullable annotation)這兩個(gè)概念,讓開發(fā)者能更明確地表達(dá)變量是否允許為null,並通過警告提示可能出錯(cuò)的地方。

Handling Nullable Reference Types in Modern C#

下面從幾個(gè)常見使用場景出發(fā),看看怎麼更好地用好這個(gè)特性。

Handling Nullable Reference Types in Modern C#

理解默認(rèn)不可空的設(shè)計(jì)哲學(xué)

在啟用可空上下文( nullable enable )後,所有引用類型默認(rèn)都是“非空”的。也就是說,像string name;這樣的聲明,編譯器會認(rèn)為你打算讓它一直有值。如果你試圖賦值為null 或者沒有初始化就使用,就會收到警告。

這其實(shí)是種“安全優(yōu)先”的設(shè)計(jì)思路。比如:

Handling Nullable Reference Types in Modern C#
  • 如果你不小心寫成了string? name = null;然後直接用了name.Length ,編譯器會提醒你這裡可能出錯(cuò)。
  • 反過來,如果變量定義為string name = null!; ,即使你強(qiáng)制繞過初始化檢查,編譯器也會標(biāo)記name.Length是潛在風(fēng)險(xiǎn)。

這種機(jī)制不是強(qiáng)制性的錯(cuò)誤,而是一種溫和的提醒,鼓勵你寫出更健壯的代碼。


使用?明確表示允許為空的情況

當(dāng)你確實(shí)需要一個(gè)變量可以為null,就在類型後面加個(gè)問號,比如string? description; 。這樣編譯器就不會再對它做“非空”假設(shè)。

常見的適用場景包括:

  • 數(shù)據(jù)庫查詢結(jié)果中可能缺失的字段
  • API 返回中可選的屬性
  • 緩存未命中時(shí)返回null 的方法

這時(shí)候訪問.Value或調(diào)用方法前,最好先做null 檢查。例如:

 if (user.Email is not null)
{
    SendEmail(user.Email);
}

或者使用null 合併操作符簡化邏輯:

 var displayName = user.Name ?? "Anonymous";

啟用和配置可空上下文的方式

要真正啟用這套機(jī)制,你需要在項(xiàng)目文件中設(shè)置<nullable>enable</nullable> ,也可以在單個(gè)文件頂部加上#nullable enable 。

有些項(xiàng)目可能一開始沒開這個(gè)選項(xiàng),這時(shí)候你可以逐步開啟,先對新文件啟用,舊代碼慢慢遷移。你還可以設(shè)置為warnings模式,只產(chǎn)生警告不改變語義行為。

另外,如果你有一些特殊字段確實(shí)想保留null 的合理性,但又不想每次都被提醒,可以用[MaybeNull][NotNullIfNotNull]等特性來告訴編譯器你的意圖。


避免誤判的小技巧

有時(shí)候編譯器判斷不準(zhǔn),特別是你在做一些複雜邏輯判斷的時(shí)候,可以通過以下方式幫牠理解:

  • 使用null檢查後,局部變量會被自動推斷為非空
  • 對於屬性或字段,可以加[MemberNotNull]告訴編譯器某個(gè)方法執(zhí)行完後某些成員不會是null
  • 如果你確定某個(gè)地方不會為空,但又不想關(guān)閉整個(gè)警告,可以用!操作符: name!.Length

不過這些都屬於“信任你自己”的操作,建議只在確實(shí)有必要時(shí)才用,否則可能會掩蓋真正的隱患。


基本上就這些。掌握這幾個(gè)點(diǎn)之後,你會發(fā)現(xiàn)代碼變得更清晰,也更容易避免運(yùn)行時(shí)的NullReferenceException。

以上是在現(xiàn)代C#中處理無效的參考類型的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
c#多線程和異步的區(qū)別 c#多線程和異步的區(qū)別 Apr 03, 2025 pm 02:57 PM

多線程和異步的區(qū)別在於,多線程同時(shí)執(zhí)行多個(gè)線程,而異步在不阻塞當(dāng)前線程的情況下執(zhí)行操作。多線程用於計(jì)算密集型任務(wù),而異步用於用戶交互操作。多線程的優(yōu)勢是提高計(jì)算性能,異步的優(yōu)勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務(wù)性質(zhì):計(jì)算密集型任務(wù)使用多線程,與外部資源交互且需要保持 UI 響應(yīng)的任務(wù)使用異步。

C#與C:歷史,進(jìn)化和未來前景 C#與C:歷史,進(jìn)化和未來前景 Apr 19, 2025 am 12:07 AM

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發(fā)明,旨在將面向?qū)ο缶幊桃隒語言,其演變歷程包括多次標(biāo)準(zhǔn)化,如C 11引入auto關(guān)鍵字和lambda表達(dá)式,C 20引入概念和協(xié)程,未來將專注於性能和系統(tǒng)級編程。 2.C#由微軟在2000年發(fā)布,結(jié)合C 和Java的優(yōu)點(diǎn),其演變注重簡潔性和生產(chǎn)力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發(fā)者的生產(chǎn)力和雲(yún)計(jì)算。

xml怎麼轉(zhuǎn)換成json xml怎麼轉(zhuǎn)換成json Apr 03, 2025 am 09:09 AM

將 XML 轉(zhuǎn)換為 JSON 的方法包括:使用編程語言(如 Python、Java、C#)編寫腳本或程序進(jìn)行轉(zhuǎn)換;使用在線工具(如 XML 轉(zhuǎn)換為 JSON、Gojko's XML 轉(zhuǎn)換器、XML 在線工具)粘貼或上傳 XML 數(shù)據(jù)並選擇 JSON 格式輸出;使用 XML 到 JSON 轉(zhuǎn)換器(如 Oxygen XML Editor、Stylus Studio、Altova XMLSpy)執(zhí)行轉(zhuǎn)換任務(wù);使用 XSLT 樣式表將 XML 轉(zhuǎn)換為 JSON;使用數(shù)據(jù)集成工具(如 Informatic

c#多線程編程是什麼  c#多線程編程用處 c#多線程編程是什麼 c#多線程編程用處 Apr 03, 2025 pm 02:45 PM

C# 多線程編程是一種讓程序同時(shí)執(zhí)行多項(xiàng)任務(wù)的技術(shù),它可以通過提升性能、提高響應(yīng)能力和實(shí)現(xiàn)並行處理來提高程序效率。雖然 Thread 類提供了直接創(chuàng)建線程的方法,但 Task 和 async/await 等高級工具可以提供更安全的異步操作和更簡潔的代碼結(jié)構(gòu)。多線程編程中常見的難題包括死鎖、競態(tài)條件和資源洩漏,需要仔細(xì)設(shè)計(jì)線程模型和使用適當(dāng)?shù)耐綑C(jī)制來避免這些問題。

C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應(yīng)用程序 C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應(yīng)用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET構(gòu)建應(yīng)用?使用.NET構(gòu)建應(yīng)用可以通過以下步驟實(shí)現(xiàn):1)了解.NET基礎(chǔ)知識,包括C#語言和跨平臺開發(fā)支持;2)學(xué)習(xí)核心概念,如.NET生態(tài)系統(tǒng)的組件和工作原理;3)掌握基本和高級用法,從簡單控制臺應(yīng)用到復(fù)雜的WebAPI和數(shù)據(jù)庫操作;4)熟悉常見錯(cuò)誤與調(diào)試技巧,如配置和數(shù)據(jù)庫連接問題;5)應(yīng)用性能優(yōu)化與最佳實(shí)踐,如異步編程和緩存。

從網(wǎng)絡(luò)到桌面:C#.NET的多功能性 從網(wǎng)絡(luò)到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

.NET框架與C#:解碼術(shù)語 .NET框架與C#:解碼術(shù)語 Apr 21, 2025 am 12:05 AM

.NETFramework是一個(gè)軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務(wù),支持桌面、Web和移動應(yīng)用開發(fā)。 2.C#設(shè)計(jì)用於.NETFramework,支持現(xiàn)代編程功能。 3..NETFramework通過CLR管理代碼執(zhí)行,C#代碼編譯成IL後由CLR運(yùn)行。 4.使用.NETFramework可快速開發(fā)應(yīng)用,C#提供如LINQ的高級功能。 5.常見錯(cuò)誤包括類型轉(zhuǎn)換和異步編程死鎖,調(diào)試需用VisualStudio工具。

c#多線程的好處有哪些 c#多線程的好處有哪些 Apr 03, 2025 pm 02:51 PM

多線程的好處在於能提升性能和資源利用率,尤其適用於處理大量數(shù)據(jù)或執(zhí)行耗時(shí)操作。它允許同時(shí)執(zhí)行多個(gè)任務(wù),提高效率。然而,線程過多會導(dǎo)致性能下降,因此需要根據(jù) CPU 核心數(shù)和任務(wù)特性謹(jǐn)慎選擇線程數(shù)。另外,多線程編程涉及死鎖和競態(tài)條件等挑戰(zhàn),需要使用同步機(jī)制解決,需要具備紮實(shí)的並發(fā)編程知識,權(quán)衡利弊並謹(jǐn)慎使用。

See all articles