首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 多條件 OR 邏輯判斷失效原因分析

     編輯:程式設計疑難解答

現象

// 正常工作
if (hNode == null || string.IsNullOrEmpty(titleStr) || !titleStr.Contains("aaa"))

// 判斷異常
if (hNode == null || string.IsNullOrEmpty(titleStr) || !titleStr.Contains("aaa") || !titleStr.Contains("bbb") || !titleStr.Contains("cccc") || !titleStr.Contains("dddd"))

第一條正常,第二條加入更多 || !Contains 後邏輯出錯。

核心原理:短路求值

C# 的 || 具備短路特性:只要前面條件為 true,後續條件不再執行。

常見誤區

  1. 預期所有條件都會被檢查:實際上第一個 true 就結束判斷。
  2. 邏輯意圖不清:若意圖是「標題不包含任一關鍵字」,應用 && 串聯 !Contains,或用 Any/All 簡化。

正確寫法示例

// 意圖:titleStr 不為空且不包含任何禁用詞
var keywords = new[] { "aaa", "bbb", "cccc", "dddd" };
bool valid = hNode != null 
          && !string.IsNullOrEmpty(titleStr) 
          && !keywords.Any(kw => titleStr.Contains(kw));

// 或傳統寫法
bool valid2 = hNode != null 
           && !string.IsNullOrEmpty(titleStr) 
           && !titleStr.Contains("aaa") 
           && !titleStr.Contains("bbb") 
           && !titleStr.Contains("cccc") 
           && !titleStr.Contains("dddd");

調試建議

  • 拆分條件逐步觀察變數值。
  • 確認 titleStr 確為 string 類型,無隱藏字符干擾。
  • 使用邏輯分組括號明確優先級。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved