C# - 逻辑运算符
C# - 逻辑运算符
Section titled “C# - 逻辑运算符”C# 中的逻辑运算符是什么?
Section titled “C# 中的逻辑运算符是什么?”C# 中的逻辑运算符用于对 bool(布尔)操作数执行布尔逻辑运算。它们通过将多个条件组合成一个 true 或 false 结果,对于控制条件语句和循环中的程序流程至关重要。
核心逻辑运算符
Section titled “核心逻辑运算符”C# 提供了三个主要的逻辑运算符。假设变量 A 为 true,变量 B 为 false。
| 运算符 | 符号 | 描述 | 示例 |
|---|---|---|---|
| 逻辑与 | && | 仅当两个操作数都为 true 时才返回 true。 | (A && B) 为 false。 |
| 逻辑或 | || | 如果至少一个操作数为 true,则返回 true。 | (A || B) 为 true。 |
| 逻辑非 | ! | 反转其操作数的布尔值。true 变为 false,false 变为 true。 | !B 为 true。 |
关键概念:短路求值
Section titled “关键概念:短路求值”&&(逻辑与)和 ||(逻辑或)运算符都执行短路求值(short-circuiting)。这是一个重要的优化和行为,需要理解:
&&(逻辑与):如果第一个操作数为false,则第二个操作数永远不会被求值,因为总结果必然是false。||(逻辑或):如果第一个操作数为true,则第二个操作数永远不会被求值,因为总结果必然是true。
短路求值示例
Section titled “短路求值示例”public bool IsValid() { Console.WriteLine("IsValid method called."); return true;}
// 对于 &&,IsValid() 不会被调用,因为第一个条件是 false。bool result1 = (5 < 3) && IsValid();Console.WriteLine($"Result 1: {result1}");
// 对于 ||,IsValid() 不会被调用,因为第一个条件是 true。bool result2 = (5 > 3) || IsValid();Console.WriteLine($"Result 2: {result2}");
// 输出:// Result 1: False// Result 2: True注意:C# 还有非短路位运算符 & 和 |,它们总是对两个操作数进行求值。这些通常用于位级操作,而不是用于一般的逻辑流程控制。
逻辑运算符的实际示例
Section titled “逻辑运算符的实际示例”示例 1:使用 && 进行登录验证
Section titled “示例 1:使用 && 进行登录验证”我们需要验证用户名和密码是否都正确。
string username = "admin";string password = "pass123";
if (username == "admin" && password == "pass123"){ Console.WriteLine("Login successful.");}else{ Console.WriteLine("Invalid credentials.");}// 输出:Login successful.示例 2:使用 || 检查折扣资格
Section titled “示例 2:使用 || 检查折扣资格”如果顾客是会员或他们的购买金额超过 100 美元,他们就能获得折扣。
bool isMember = false;double purchaseAmount = 120.0;
if (isMember || purchaseAmount > 100){ Console.WriteLine("Discount applied.");}else{ Console.WriteLine("No discount available.");}// 输出:Discount applied.示例 3:使用 ! 检查活动会话
Section titled “示例 3:使用 ! 检查活动会话”我们希望仅当用户未登录时才提示他们登录。
bool isLoggedIn = false;
if (!isLoggedIn){ Console.WriteLine("Please log in to continue.");}else{ Console.WriteLine("Welcome back!");}// 输出:Please log in to continue.您可以组合多个运算符来创建复杂的规则。使用括号 () 来确保正确的求值顺序。
int age = 25;bool hasLicense = true;bool isSober = true;
// 如果你清醒并且(你已满 18 岁并持有驾照),你就可以驾驶if (isSober && (age >= 18 && hasLicense)){ Console.WriteLine("Cleared to drive.");}else{ Console.WriteLine("Not allowed to drive.");}// 输出:Cleared to drive.使用逻辑运算符的最佳实践
Section titled “使用逻辑运算符的最佳实践”- 使用括号增加清晰度:始终使用
()来分组条件,即使运算符优先级看起来很明显。这会使代码更易于阅读,例如if ((user.IsAdmin || user.IsEditor) && !user.IsLockedOut)。 - 简化否定:不要使用
if (isReady == false),而是使用更简洁、更具可读性的if (!isReady)。 - 避免冗余检查:不要使用
if (isValid == true),直接使用if (isValid)即可。 - 利用短路求值:在
&&链中,将开销较小或更可能失败的条件放在前面。例如,在访问成员之前检查null:if (user != null && user.IsAdmin)。 - 提取到方法:如果逻辑条件变得过于复杂,请将其提取到一个命名良好的方法或属性中。您可以将冗长的
if语句替换为if (IsEligibleForPromotion(employee))。