在C#語言里對NULL的技術處理

文章目錄

  • 前言
  • 1 、NULL合并操作符(??)
  • 2. 條件運算符 (?:)
  • 3. 空條件運算符(?.)
  • 4. 空合并賦值操作符 (??=)
  • 5. 寬容運算符 (!.)
  • 6. 使用 is 運算符
  • 7. ArgumentNullException 參數空異常
  • 結論


前言

在 C# 中,null 是一個特殊存在,表示缺少值。Null 可以分配給引用類型和可為 null 的值類型,但不能分配給不可為空的值類型。在 C# 中處理 null 值是編寫可靠且可靠的代碼的一個重要方面。在本文中,我將討論一些在 C# 中處理 null 值的最常用技術。


1 、NULL合并操作符(??)

null合并操作符(??)是一個簡寫操作符,用于在左側對象不為null時返回左側值,在左側對象為null時返回右側值。當您在判斷當前對象值是否null值并且賦值新對象需要簡寫時,此操作符非常有用。

string name = null;
string result = name ?? "Unknown";
Console.WriteLine(result); // Output: Unknown
在上面的示例中,由于name的值為null,因此使用null合并運算符將“Unknown”的值賦給result。

2. 條件運算符 (?😃

條件運算符(?:)是一個三元運算符,用于代替if-else的簡寫,如果條件為真則返回一個值,如果條件為假則返回另一個值。當需要根據條件提供默認值時,此操作符很有用。

string name = null;
string result = (name != null) ? name : "Unknown";
Console.WriteLine(result); // Output: Unknown
在上面的例子中,由于name的值為null,因此使用條件運算符將“Unknown”的值賦給result。

3. 空條件運算符(?.)

如果對象不為空,則使用空條件操作符(?.)訪問對象的成員,否則返回空。當您需要訪問可能為空的對象的屬性或方法時,此操作符非常有用。

string name = null;
int? length = name?.Length;
Console.WriteLine(length); // Output: null

在上面的例子中,因為name的值是空的,所以length的值也是空的。

但你也可以利用 合并操作運算符(??) 進行進階的寫法,代碼如下:

string name = null;
int length = name?.Length??0;
Console.WriteLine(length); // Output: 0

可以看到上面的代碼例子里,length可以不用空的值類型獲取name的長度,可以在你的業務邏輯里認為null的字符串長度也可以是0長度,減少后期值類型的復雜判斷。

4. 空合并賦值操作符 (??=)

空合并賦值操作符(??=)用于在左側對象為空時將右側對象賦值給左側。意思就是如果變量對象為空,可以給它賦值一個默認對象值,在理解上它可以簡化代碼并使其更加簡潔。

string name = null;
name ??= "Unknown";
Console.WriteLine(name); // Output: Unknown

在上面的示例中,由于name的值為空,因此使用空合并賦值操作符將“Unknown”的值賦給name。

5. 寬容運算符 (!.)

允許為空的操作符(!.)用于告訴編譯器值不為空,即使編譯器無法確定該值不為空。當您知道一個值不會為空,但編譯器無法確定它不會為空時,此操作符很有用。

string name = null!;
int length = name.Length;
Console.WriteLine(length); // Output: System.NullReferenceException

在上面的例子中,寬容操作符用于告訴編譯器name的值不可為空。但是,由于name的值實際上是空的,所以系統在運行時拋出NullReferenceException。

6. 使用 is 運算符

在C#編程語言中,“is”操作符是一個關鍵字,用于檢查變量是否與特定類型兼容。隨著C#7.0中常量模式的引入,這個運算符獲得了額外的功能。具體來說,現在可以使用“is”操作符將值與常量(如null)進行比較。

if (name is null)
{// code to execute
}
Console.WriteLine(name);

使用“is”運算符的擴展功能使開發人員能夠在c#應用程序中執行類型檢查和比較時編寫更簡潔、更可讀的代碼。

或者,您也可以使用操作符檢查:==null

object obj = null;if (obj == null)
{// do something if obj is null
}
else
{// do something else if obj is not null
}

這兩種方法都可以,但是使用操作符進行檢查可能更具可讀性和表現力,特別是當與其他類型檢查 is null 結合使用時。

7. ArgumentNullException 參數空異常

最后,ArgumentNullException類用于處理傳遞給方法或構造函數的空參數。當您需要確保傳遞給方法或構造函數的參數不為空時,該類非常有用。

public void DoSomething(string name)
{if (name == null){throw new ArgumentNullException(nameof(name));}Console.WriteLine($"Hello, {name}!");
}// Usage
DoSomething(null); // Output: System.ArgumentNullException: Value cannot be null. (Parameter 'name')

在上面的例子中,ArgumentNullException類用于在name的值為空時拋出異常。

結論

在軟件開發中,處理null值是非常重要的事情。我們討論了在C#中處理null值的7種技術。此外,在C#中處理null值對于避免空引用異常和其他意外行為也很重要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13218.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13218.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13218.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安卓Fragment基礎

目錄 前言一、基礎使用二、動態添加Fragment三、Fragment的生命周期四、Fragment之間進行通信五、Fragment兼容手機和平板示例 前言 Fragment基礎使用筆記 一、基礎使用 Activity布局和文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/andro…

OpenAI 發布 GPT-4o,再次鞏固行業地位!

5 月 14 日凌晨 1 點&#xff08;太平洋時間上午 10 點&#xff09;&#xff0c;OpenAI 發布了其最新的 GPT-4o&#xff0c;再次鞏固了其在人工智能領域的領導地位。這次發布不僅僅是一個產品的推出&#xff0c;更是向世界宣告 AI 技術已邁入一個全新的紀元。OpenAI 的 CEO 薩姆…

品牌竄貨治理管控的方法

竄貨問題確實是一個需要品牌方高度關注和有效治理的難題。這種現象通常源于品牌區域銷售政策的差異&#xff0c;經銷商為了獲取更多的利潤&#xff0c;往往會利用這些差異進行跨區域的低價銷售。這不僅損害了大多數經銷商的利益&#xff0c;也破壞了市場的穩定和品牌價值。 品牌…

深入理解 Spring 循環依賴之三級緩存(附源碼分析)

前言&#xff1a; 學過 Spring 的都知道 Spring 利用三級緩存解決了循環依賴問題&#xff0c;那你知道什么是循環依賴&#xff1f;什么又是三級緩存&#xff1f;本篇將從源碼層面分析 Spring 是怎么去利用三級緩存幫我們解決循環依賴問題。 深入理解 Spring IOC 底層實現機制…

三生隨記——麗水詭事

在浙江的深山之中&#xff0c;隱藏著一座名為麗水的古老小城。這里山水秀麗&#xff0c;風景如畫&#xff0c;但在這美麗的外表下&#xff0c;卻隱藏著不為人知的恐怖秘密。 傳聞&#xff0c;麗水的郊外有一片被詛咒的竹林。這片竹林與其他竹林不同&#xff0c;它的葉子常年枯黃…

c# datagridview基本操作,包括行拖拽,添加自定義行列。

項目場景&#xff1a; 這段代碼定義了一個名為 ucDatagridviewHelper 的用戶控件&#xff08;UserControl&#xff09;&#xff0c;該控件包含了一個 DataGridView 控件和一些其他功能。 這段代碼的主要部分&#xff1a; 構造函數&#xff1a;在構造函數中&#xff0c;初始化…

C++ | Leetcode C++題解之第89題格雷編碼

題目&#xff1a; 題解&#xff1a; class Solution { public:vector<int> grayCode(int n) {vector<int> ret(1 << n);for (int i 0; i < ret.size(); i) {ret[i] (i >> 1) ^ i;}return ret;} };

數據結構--紅黑樹(RBTree)

一、紅黑樹概念 1.1 什么是紅黑樹 紅黑樹&#xff0c;是一種二叉搜索樹&#xff0c;但在每個結點上增加一個存儲位表示結點的顏色&#xff0c;可以是Red或 Black。 通過對任何一條從根到葉子的路徑上各個結點著色方式的限制&#xff0c;紅黑樹確保沒有一條路徑會比其他路徑長…

openEuler-22.03-LTS安裝opengauss5.0.1(包含cm集群管理)主備

環境說明 openEuler-22.0.3-LTS opengauss5.0.1 安裝數據庫 安裝系統依賴包 yum -y install lksctp* yum -y install psmisc yum -y install bzip2 yum -y install unzip yum -y install gcc yum -y install gcc-c yum -y install perl yum -y install libxml2-devel yum …

前端(包含cocosCreator)開發環節調取后端接口時跨域,解決辦法之反向代理

/** eslint-disable */ var http require(http),httpProxy require(http-proxy),HttpProxyRules require(http-proxy-rules);// Set up proxy rules instance var port 9090 var proxyRules new HttpProxyRules({rules: {/api/(.*): https://baidu.com/$1, // 測試環境游戲…

自學VBA 設置單元格文字格式 筆記

一.設定對應單元格對應需要顯示的格式 Cells(1, 1).Font.Size 18 字體大小 Cells(1, 2).Font.Color RGB(255, 0, 0) 字體顏色 Cells(1, 3).Font.Name "黑體" 字體類型 Cells(1, 4).Font.Italic True 字體斜體 Cells(1, 5).Font.FontStyle "BOLD"…

ubuntu下gcc編譯器的安裝

.gcc編譯器的安裝 一般linux下是覆蓋含有的&#xff0c;如果沒有執行更新命令 sudo apt update gcc安裝成功&#xff0c;可以檢查一下版本 可以看出我的gcc是9.4.0版本的

驗證torch.nn.Conv2d

import os import cv2 import torch import numpy as np import random import cv2 as cv from matplotlib import pyplot as pltdef f_VerifyConv2D():"""驗證torch.nn.Conv2d&#xff0c; 并將輸入數據及權重保存到txt文件中"""x torch.randn…

SpringBoot環境隔離Profiles

前言 通常我們開發不可能只有一個生產環境&#xff0c;還會有其它的開發&#xff0c;測試&#xff0c;預發布環境等等。為了更好的管理每個環境的配置項&#xff0c;springboot也提供了對應的環境隔離的方法。 直接上干貨 知識點 激活環境方法 1&#xff0c;在application…

專用設備制造業供應商收發文件,有什么專業而輕便的方式嗎?

專用設備制造業的特點包括&#xff1a;門類廣、跨度大、科技含量高。它主要生產的是國民經濟各部門&#xff08;包括采掘、化工、冶煉、能源、醫療衛生、環保等&#xff09;所急需的重大成套設備&#xff0c;例如礦產資源井采及露天開采設備、大型火電、水電、核電成套設備、石…

教育行業文本短信VS視頻短信VS語音短信哪個好?

在教育行業中&#xff0c;文本短信、視頻短信和語音短信各有其優勢&#xff0c;選擇哪種方式更好取決于具體的應用場景和目標。 文本短信的優勢在于&#xff1a; 1.簡潔明了&#xff1a;能夠快速、直接地傳遞信息&#xff0c;對于需要快速通知或提醒的場景非常適用。 …

通過內網穿透免費部署我們的springboot+vue項目 實現跟服務器一樣的效果

前文講到通過內網穿透能夠實現遠程訪問個人電腦的靜態資源。本文將講解通過內網穿透實現遠程訪問本地的項目&#xff0c;實現跟部署到服務器一樣的效果&#xff1a;前文鏈接&#xff1a;通過內網穿透實現遠程訪問個人電腦資源詳細過程&#xff08;免費&#xff09;&#xff08;…

深度學習之卷積神經網絡理論基礎

深度學習之卷積神經網絡理論基礎 卷積層的操作&#xff08;Convolutional layer&#xff09; 在提出卷積層的概念之前首先引入圖像識別的特點 圖像識別的特點 特征具有局部性&#xff1a;老虎重要特征“王字”僅出現在頭部區域特征可能出現在任何位置下采樣圖像&#xff0c…

Python 小抄

Python 備忘單 目錄 1.語法和空格 2.注釋 3.數字和運算 4.字符串處理 5.列表、元組和字典 6.JSON 7.循環 8.文件處理 9.函數 10.處理日期時間 11.NumPy 12.Pandas 要運行單元格&#xff0c;請按 ShiftEnter 或單擊頁面頂部的 Run&#xff08;運行&#xff09;。 1.語法和空格…

三種方法進行跨服務器文件傳輸

今天需要在一個centOS服務器上編譯一個工具, 我的本地主機是ubuntu, 但是由于服務器是合規環境, 沒有文件傳輸的接口, 也不能訪問github等外網, 所以很多依賴只能下載到ubuntu然后在想辦法搞到服務器上. 這種場景有三種簡單有用的辦法, 整理一下. 方法一: 把主機配置成http ser…