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

目錄
啟用無(wú)效的參考類型
了解無(wú)效註釋
NRT幫助的常見(jiàn)場(chǎng)景
如何正確處理無(wú)效案件
首頁(yè) 後端開(kāi)發(fā) C#.Net教程 C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException?

C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException?

Jun 21, 2025 am 12:36 AM
C# 8

C#8中的可無(wú)效參考類型(NRTS)通過(guò)默認(rèn)情況下的參考類型不可刪除來(lái)幫助捕獲NullReferenceException錯(cuò)誤,這需要明確的聲明來(lái)確定無(wú)效性。必須在.csproj文件中啟用nrts enable ,或使用#nullable Enable在.cs文件的頂部啟用。啟用後,諸如字符串名稱之類的變量;是否將其視為無(wú)效的,而無(wú)效的則必須將其聲明為字符串?姓名;。編譯器警告是否使用潛在的無(wú)零值未經(jīng)檢查,例如字符串上的lengthth呼叫。多變的。 NRT在現(xiàn)實(shí)情況下有助於諸如處理API或數(shù)據(jù)庫(kù)的數(shù)據(jù),具有無(wú)效元素的集合以及接受null的可選參數(shù)。適當(dāng)?shù)奶幚砑夹g(shù)包括使用零條件運(yùn)算符(?),無(wú)污染操作員(??),顯式無(wú)效檢查以及諸如notnullifnotnull之類的屬性。最終,NRT不會(huì)刪除空,而是執(zhí)行故意的無(wú)效處理,從而產(chǎn)生更安全,更可預(yù)測(cè)的代碼。

C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException?

C#8中的無(wú)效參考類型(NRT)是一項(xiàng)功能,旨在幫助開(kāi)發(fā)人員在編譯時(shí)間而不是運(yùn)行時(shí)捕獲潛在的NullReferenceException錯(cuò)誤。在c#的早期版本中,默認(rèn)情況下所有參考類型都可以無(wú)效,這意味著您可以在沒(méi)有任何警告或錯(cuò)誤的情況下將null分配給它們。當(dāng)嘗試訪問(wèn)null對(duì)像上的成員時(shí),這通常會(huì)導(dǎo)致意外崩潰。

使用NRTS,默認(rèn)情況下,參考類型是不可刪除的,並且編譯器警告您,如果您在嘗試使用它時(shí)檢測(cè)到變量可能為null。這有助於實(shí)施更好的零處理實(shí)踐,並減少由未經(jīng)處理的空值引起的錯(cuò)誤。


啟用無(wú)效的參考類型

要使用NRT,您需要選擇該功能。默認(rèn)情況下,它並未自動(dòng)啟用所有項(xiàng)目,尤其是較舊的項(xiàng)目。

您可以以兩種方式之一啟用NRT:

  • 在您的.csproj文件中:

     <propertyGroup>
      <nullable>啟用</nullable>
    </propertyGroup>
  • 在特定.cs文件的頂部:

     #nullable啟用

啟用後,編譯器將開(kāi)始分析您的代碼,以便在不可刪除的參考類型上使用零用使用情況。


了解無(wú)效註釋

啟用NRT時(shí),字符串聲明之類的string name;卑鄙的name永遠(yuǎn)不應(yīng)為null 。如果要允許null ,則必須明確將其聲明為string? name; 。

這種區(qū)別使編譯器可以跟蹤預(yù)期零的位置以及不何處。

例如:

字符串消息= getMessage(); //編譯器可能會(huì)在此處警告如果GetMessage可以返回null
Console.Writeline(message.length); //警告:無(wú)效參考的可能解除

如果宣布GetMessage()返回string? ,編譯器會(huì)在訪問(wèn).Length之前警告您,因?yàn)?code>message可能為null。

這使您更容易發(fā)現(xiàn)您忘記處理無(wú)效案件的地方。


NRT幫助的常見(jiàn)場(chǎng)景

在幾種現(xiàn)實(shí)情況下,NRT有助於防止NullReferenceException

  • 來(lái)自外部來(lái)源的數(shù)據(jù)
    像API或數(shù)據(jù)庫(kù)一樣,可能會(huì)意外返回null 。宣布這樣的結(jié)果string?在使用它們之前,請(qǐng)迫使您檢查。

  • 可能無(wú)效元素的收集
    例如, List<string></string>告訴您列表中的某些項(xiàng)目可能為null,因此您應(yīng)該在使用前檢查每個(gè)項(xiàng)目。

  • 默認(rèn)值的可選方法參數(shù)
    當(dāng)使用諸如void Log(string? message = null)之類的可選參數(shù)時(shí),將參數(shù)標(biāo)記為無(wú)效,請(qǐng)?zhí)嵝押艚姓撸?null是有效的輸入。

通過(guò)使類型系統(tǒng)的無(wú)效性一部分,NRT可以鼓勵(lì)開(kāi)發(fā)人員編寫(xiě)更安全的代碼,而不僅僅是僅依靠文檔或運(yùn)行時(shí)檢查。


如何正確處理無(wú)效案件

僅僅因?yàn)镹RTS標(biāo)誌潛在問(wèn)題並不意味著您已經(jīng)完成了 - 您仍然需要正確處理這些案件。這是一些常見(jiàn)的技術(shù):

  • 使用零條件運(yùn)算符: person?.Name
  • 使用零煤氣操作員: name ?? "default"
  • 添加顯式空檢查: if (value == null) throw new ArgumentNullException(...)
  • 使用NotNullIfNotNull和其他屬性來(lái)幫助編譯器了解更複雜的邏輯

一旦您開(kāi)始定期與NRT合作,這些模式就會(huì)成為第二天性。


基本上,無(wú)效的參考類型不會(huì)神奇地消除零值 - 它們只是讓您考慮它們可以出現(xiàn)的地方以及如何安全處理它們。這是一個(gè)小的思維方式轉(zhuǎn)變,在更少的崩潰和更可預(yù)測(cè)的代碼中得到了回報(bào)。

以上是C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException?的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(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整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門(mén)話題

C#中產(chǎn)量關(guān)鍵字對(duì)創(chuàng)建迭代器的意義是什麼? C#中產(chǎn)量關(guān)鍵字對(duì)創(chuàng)建迭代器的意義是什麼? Jun 19, 2025 am 12:17 AM

healieldKeyWordinc#簡(jiǎn)化了creationeratoratorabyautomationalingaseratingastatemachinethatemachinathablesLazyEvaluation.1.ItallowSreturningReturningInturningItemSoneatAtiMeTimeYielderturn,pausingexecutionBeteachieneachIneachIneachIneachIneachIneachIneachIneachItem,whoisidealforlargeordeNemicSequences.2.yieldBreakcanbeus.2.yieldBreakcanbeus

什麼是依賴性注入(DI),如何在C#中實(shí)現(xiàn)(例如,在ASP.NET Core中使用內(nèi)置DI)? 什麼是依賴性注入(DI),如何在C#中實(shí)現(xiàn)(例如,在ASP.NET Core中使用內(nèi)置DI)? Jun 30, 2025 am 02:06 AM

DependencyInjection(DI)inC#isadesignpatternthatenhancesmodularity,testability,andmaintainabilitybyallowingclassestoreceivedependenciesexternally.1.DIpromotesloosecouplingbydecouplingobjectcreationfromusage.2.Itsimplifiestestingthroughmockobjectinject

IDisposable接口和C#中的使用語(yǔ)句的目的是什麼? IDisposable接口和C#中的使用語(yǔ)句的目的是什麼? Jun 27, 2025 am 02:18 AM

IDisposable和using在C#中的作用是高效且確定性地管理非託管資源。 1.IDisposable提供Dispose()方法,使類能明確定義如何釋放非託管資源;2.using語(yǔ)句確保對(duì)象超出範(fàn)圍時(shí)自動(dòng)調(diào)用Dispose(),簡(jiǎn)化資源管理並避免洩漏;3.使用時(shí)需注意對(duì)象必須實(shí)現(xiàn)IDisposable,可聲明多個(gè)對(duì)象,並應(yīng)始終對(duì)如StreamReader等類型使用using;4.常見(jiàn)最佳實(shí)踐包括不要依賴析構(gòu)函數(shù)清理、正確處理嵌套對(duì)象及實(shí)現(xiàn)Dispose(bool)模式。

Lambda表達(dá)式和LINQ(語(yǔ)言集成查詢)如何增強(qiáng)C#中的數(shù)據(jù)操作? Lambda表達(dá)式和LINQ(語(yǔ)言集成查詢)如何增強(qiáng)C#中的數(shù)據(jù)操作? Jun 20, 2025 am 12:16 AM

LambdaexpressionsandLINQsimplifydatamanipulationinC#byenablingconcise,readable,andefficientcode.1.Lambdaexpressionsallowinlinefunctiondefinitions,makingiteasiertopasslogicasargumentsforfiltering,transforming,sorting,andaggregatingdatadirectlywithinme

使用C#開(kāi)發(fā)時(shí),有哪些常見(jiàn)的陷阱或反圖案可以避免? 使用C#開(kāi)發(fā)時(shí),有哪些常見(jiàn)的陷阱或反圖案可以避免? Jun 23, 2025 am 12:05 AM

C#開(kāi)發(fā)中常見(jiàn)四大“反模式”問(wèn)題需避免。一是不合理使用async/await導(dǎo)致死鎖或性能下降,應(yīng)堅(jiān)持全異步原則、配置ConfigureAwait(false)并規(guī)范命名;二是過(guò)度依賴var影響可讀性,應(yīng)在類型不明確時(shí)顯式聲明并統(tǒng)一團(tuán)隊(duì)規(guī)范;三是錯(cuò)誤使用Dispose和資源管理引發(fā)泄漏,應(yīng)正確使用using語(yǔ)句及實(shí)現(xiàn)IDisposable標(biāo)準(zhǔn)模式;四是濫用靜態(tài)類或單例造成測(cè)試?yán)щy,應(yīng)優(yōu)先依賴注入、保持無(wú)狀態(tài)或由容器管理生命周期。避開(kāi)這些誤區(qū)可顯著提升代碼質(zhì)量與維護(hù)性。

C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException? C#8中的可無(wú)效參考類型(NRT)是什麼,它們?nèi)绾螏椭乐筃ullReferenceException? Jun 21, 2025 am 12:36 AM

Nullablereferencetypes(NRTs)inC#8 helpcatchNullReferenceExceptionerrorsatcompiletimebymakingreferencetypesnon-nullablebydefault,requiringexplicitdeclarationfornullability.NRTsmustbeenabledeitherinthe.csprojfilewithenableoratthetopofa.csfileusing#null

如何在C#中使用跨度和內(nèi)存來(lái)優(yōu)化內(nèi)存使用情況並減少分配? 如何在C#中使用跨度和內(nèi)存來(lái)優(yōu)化內(nèi)存使用情況並減少分配? Jun 18, 2025 am 12:11 AM

Span和Memory通過(guò)減少內(nèi)存分配提升C#性能。 1.Span避免數(shù)組複製,提供對(duì)現(xiàn)有內(nèi)存的輕量引用,適用於解析二進(jìn)制協(xié)議、字符串操作及高性能緩衝區(qū)管理;2.Memory支持跨異步方法傳遞內(nèi)存切片,適用於需要更靈活生命週期的場(chǎng)景;3.二者降低GC壓力,通過(guò)重用緩衝區(qū)、避免臨時(shí)拷貝優(yōu)化性能;4.Span受限於棧上使用,不可存儲(chǔ)於類或用於異步方法,需注意避免調(diào)用.ToArray()等導(dǎo)致重新分配的操作。

您能在面向?qū)ο蟮脑O(shè)計(jì)中解釋可靠的原理及其應(yīng)用嗎? 您能在面向?qū)ο蟮脑O(shè)計(jì)中解釋可靠的原理及其應(yīng)用嗎? Jun 25, 2025 am 12:47 AM

SOLID原則是面向?qū)ο缶幊讨刑嵘a可維護(hù)性和擴(kuò)展性的五項(xiàng)設(shè)計(jì)原則,它們分別是:1.單一職責(zé)原則(SRP)要求類只承擔(dān)一個(gè)職責(zé),如將報(bào)告生成與郵件發(fā)送分離;2.開(kāi)閉原則(OCP)強(qiáng)調(diào)通過(guò)接口或抽像類支持?jǐn)U展而不修改原有代碼,如使用IShape接口實(shí)現(xiàn)不同圖形的面積計(jì)算;3.里氏替換原則(LSP)要求子類能替換父類而不破壞邏輯,如Square不應(yīng)錯(cuò)誤繼承Rectangle導(dǎo)致行為異常;4.接口隔離原則(ISP)主張定義細(xì)粒度接口,如拆分打印與掃描功能避免冗餘依賴;5.依賴倒置原則(DIP)提倡依

See all articles