最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中空值校驗應用場景分析

 更新時間:2026年03月09日 10:11:50   作者:元亨利貞448  
文章主要介紹了在C#編程中進行空值校驗的重要性,包括校驗的必要場景、為什么要做校驗以及如何進行校驗,校驗可以避免空引用異常,保障數據合法性,并提前攔截錯誤,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

# 在 C# 編程(尤其是業(yè)務開發(fā))中,空值校驗是保障程序穩(wěn)定性、避免空引用異常(`NullReferenceException`)的核心手段。結合你這段物料分類新增的代碼,我會從**場景+原因+示例**三個維度,清晰告訴你什么情況必須做空值校驗。

 一、必須做空值校驗的核心場景

 1. 外部輸入/入參校驗(最基礎也最關鍵)

**適用場景**:
- 方法/函數的入參(尤其是外部系統(tǒng)、用戶輸入、第三方接口傳遞的參數)
- 從配置文件、數據庫、消息隊列讀取的數據
- API 接口接收的請求參數
**為什么要做**:
外部數據不受你的代碼控制,可能是 null、空字符串、格式錯誤等,直接使用會導致程序崩潰。
**對應你代碼的示例**:

// 你的代碼中對入口參數的校驗(必須做)
if (receiveEventInfo == null || string.IsNullOrWhiteSpace(receiveEventInfo.Content))
{
    LogTextHelper.Warn("物料分類新增失敗:接收的事件信息為空或內容為空");
    return;
}

如果不校驗receiveEventInfo.Content 為 null 時,會直接拋出 NullReferenceException,導致整個方法崩潰,甚至影響調用方。

2. 反序列化/類型轉換后的數據校驗

適用場景

  • JSON/XML 反序列化后的對象(如你代碼中 JsonConvert.DeserializeObject 的結果)
  • 數據庫查詢結果(如 FindSingle 查不到數據會返回 null)
  • 類型轉換(如 Convert.ToInt32、TryParse 失敗的情況)

為什么要做: 反序列化/查詢可能因數據格式錯誤、數據不存在等原因返回 null,后續(xù)訪問其屬性(如 eventInfo.Archive)會直接報錯。

對應你代碼的示例

// 反序列化后的對象校驗(必須做)
if (eventInfo == null || string.IsNullOrWhiteSpace(eventInfo.Archive))
{
    LogTextHelper.Warn("物料分類新增失?。悍葱蛄谢蟮腁rchive數據為空");
    return;
}

如果不校驗eventInfo 為 null 時,eventInfo.Archive 會觸發(fā)空引用異常,中斷業(yè)務流程。

3. 嵌套對象/多級屬性訪問前

適用場景

  • 訪問對象的嵌套屬性(如 dTOArchive.Name.ZhCN
  • 調用對象的方法(如 list.Add() 前,list 可能為 null)

為什么要做: C# 中多級屬性訪問時,只要其中一級為 null,就會拋出空引用異常。

對應你代碼的示例

// 空值保護:防止 Name 為 null 導致 ZhCN 訪問失敗
info.TypeName = dTOArchive.Name?.ZhCN ?? string.Empty;

如果不做保護dTOArchive.Name 為 null 時,dTOArchive.Name.ZhCN 會直接報錯。

4. 數據庫/緩存操作前的關鍵數據校驗

適用場景

  • 插入/更新數據庫前,校驗核心字段(如主鍵、必填字段)
  • 依賴其他數據的操作(如你代碼中父級分類查詢結果)

為什么要做: 核心字段為空會導致數據庫操作失?。ㄈ缰麈I為空、外鍵關聯(lián)失?。?,依賴數據不存在會導致業(yè)務邏輯錯誤。

對應你代碼的示例

// 父級分類查詢結果校驗(必須做)
if (p_info != null)
{
    info.ParentID = p_info.ID;
    info.ERPParentID = p_info.ERPID;
}
else
{
    string errorMsg = $"物料分類【{dTOArchive.Code}】父級數據不存在,父級ERPID:{dTOArchive.Parent}";
    LogTextHelper.Error(errorMsg);
    throw new Exception(errorMsg);
}

如果不校驗p_info 為 null 時,p_info.ID 會報錯,且會將無效的父級ID插入數據庫,導致數據臟污。

5. 可選但建議做的場景

  • 集合類型(List/Array):訪問 list.Count 前,校驗 list != null
  • 可空值類型(int?/DateTime?):取值前校驗 HasValue
  • 第三方組件/工具類返回值:如 File.ReadAllText 可能返回 null(文件不存在)

二、可以不做空值校驗的場景(對比理解)

不是所有場景都需要校驗,以下情況可省略:

  1. 內部可控的常量/初始化對象:如 var info = new MaterialTypeInfo(); 后,info 不可能為 null,無需校驗。
  2. C# 8.0+ 的可空引用類型(Nullable Reference Types):通過 ! 操作符明確標記非空(如 name!),且代碼經過嚴格靜態(tài)檢查。
  3. 單元測試中的 mock 數據:數據由你完全控制,且僅用于測試。

總結

  1. 核心原則:只要數據來源不受代碼直接控制(外部入參、反序列化、數據庫/第三方返回),或涉及多級屬性訪問,必須做空值校驗。
  2. 校驗目的:避免空引用異常、保障數據合法性、提前攔截錯誤(而非讓程序崩潰)。
  3. 最佳實踐:校驗時不僅要判斷 null,還要結合業(yè)務判斷“無效值”(如空字符串、0值等,如你代碼中的 string.IsNullOrWhiteSpace)。

到此這篇關于C#中空值校驗應用場景分析的文章就介紹到這了,更多相關C#空值校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • DevExpress實現(xiàn)TreeList節(jié)點互斥的方法

    DevExpress實現(xiàn)TreeList節(jié)點互斥的方法

    這篇文章主要介紹了DevExpress實現(xiàn)TreeList節(jié)點互斥的方法,對于初學者更好的理解C#有一定的幫助,需要的朋友可以參考下
    2014-08-08
  • unity實現(xiàn)多點觸控代碼

    unity實現(xiàn)多點觸控代碼

    這篇文章主要介紹了unity實現(xiàn)多點觸控代碼,我最近在學習Unity游戲引擎。先從Unity平面開始,本章介紹Unity 平面上的多點觸摸。有需要的小伙伴參考下。
    2015-03-03
  • C#取得Web程序和非Web程序的根目錄的N種取法總結

    C#取得Web程序和非Web程序的根目錄的N種取法總結

    C#取得Web程序和非Web程序的根目錄的N種取法,方便大家知道,有更好的方法,請說明
    2008-03-03
  • 在C#中實現(xiàn)接口事件的具體示例

    在C#中實現(xiàn)接口事件的具體示例

    在C#中,接口(interface)是一種定義類必須實現(xiàn)的方法和屬性的抽象類型,除了方法和屬性,接口還可以包含事件,實現(xiàn)接口事件可以幫助我們設計更加靈活和解耦的系統(tǒng),本文將詳細探討如何在C#中實現(xiàn)接口事件,并通過具體示例說明其應用,需要的朋友可以參考下
    2024-08-08
  • C#使用隨機數編寫班級點名器的示例代碼

    C#使用隨機數編寫班級點名器的示例代碼

    本文主要介紹了C#使用隨機數編寫班級點名器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C#讀寫注冊表的思路及代碼

    C#讀寫注冊表的思路及代碼

    這篇文章主要介紹了C#讀寫注冊表的思路及代碼,有需要的朋友可以參考一下
    2013-12-12
  • C#處理Paint事件的方法

    C#處理Paint事件的方法

    這篇文章主要介紹了C#處理Paint事件的方法,實例分析了C#使用Paint進行圖形繪制的技巧,需要的朋友可以參考下
    2015-06-06
  • C#并發(fā)實戰(zhàn)記錄之Parallel.ForEach使用

    C#并發(fā)實戰(zhàn)記錄之Parallel.ForEach使用

    這篇文章主要給大家介紹了關于C#并發(fā)實戰(zhàn)記錄之Parallel.ForEach使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • C# Opacity 不透明度的具體使用

    C# Opacity 不透明度的具體使用

    本文主要介紹了C# Opacity 不透明度的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • C#自定義字符串壓縮和解壓縮的方法

    C#自定義字符串壓縮和解壓縮的方法

    這篇文章主要介紹了C#自定義字符串壓縮和解壓縮的方法,通過自定義C#字符串操作類實現(xiàn)對字符串的壓縮與解壓的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04

最新評論

黄浦区| 潜山县| 聊城市| 临江市| 霞浦县| 师宗县| 桃园县| 莲花县| 葫芦岛市| 阳朔县| 化隆| 邳州市| 阳东县| 阿图什市| 拉萨市| 灵寿县| 内江市| 新疆| 乡城县| 仙居县| 福贡县| 永吉县| 西峡县| 安国市| 株洲县| 盘锦市| 罗山县| 巫山县| 武定县| 泌阳县| 南宁市| 石棉县| 大方县| 南江县| 汕头市| 沭阳县| 顺昌县| 高尔夫| 八宿县| 当雄县| 平顶山市|