Skip to content

07-条件判断

条件判断是编程中非常重要的逻辑控制手段,用于根据不同的条件执行不同的代码。在 C# 中,常用的条件判断语句包括 if-else​、switch​ 和三元运算符。


1. if-else​ 语句

if-else​ 是最基本的条件判断语句,基于布尔表达式的结果(true​ 或 false​)执行不同的代码块。

语法:

csharp
if (条件)
{
    // 条件为 true 时执行的代码
}
else if (其他条件)
{
    // 其他条件为 true 时执行的代码
}
else
{
    // 所有条件为 false 时执行的代码
}

示例代码:

csharp
int number = 10;

if (number > 0)
{
    Console.WriteLine("数字是正数");
}
else if (number < 0)
{
    Console.WriteLine("数字是负数");
}
else
{
    Console.WriteLine("数字是零");
}

在这个例子中,判断 number​ 是正数、负数还是零,并根据条件执行不同的输出。

说明:

  • if​ 后面的括号内必须是一个布尔表达式。
  • else if​ 可以有多个,用于多个条件的判断。
  • else​ 是可选的,用于在所有条件都不满足时执行的代码块。

2. 嵌套 if​ 语句

if​ 语句可以嵌套在其他 if​ 语句内部,用于检查更复杂的条件逻辑。

语法:

csharp
if (条件1)
{
    if (条件2)
    {
        // 当条件1和条件2都为 true 时执行的代码
    }
}

示例代码:

csharp
int number = 15;

if (number > 0)
{
    if (number % 2 == 0)
    {
        Console.WriteLine("数字是正偶数");
    }
    else
    {
        Console.WriteLine("数字是正奇数");
    }
}

在这个例子中,首先判断 number​ 是否为正数,然后在这个条件为真时,进一步判断 number​ 是偶数还是奇数。

说明:

  • 嵌套的 if​ 语句可以用于处理更复杂的多层条件。
  • 嵌套层次不宜过深,避免影响代码可读性。

3. switch​ 语句

switch​ 语句用于对一个变量进行多值判断,适合于替代多重 if-else​ 语句。switch​ 语句中的每个 case​ 都代表一个可能的取值,并根据匹配的值执行对应的代码。

语法:

csharp
switch (变量)
{
    case 值1:
        // 当变量等于值1时执行的代码
        break;
    case 值2:
        // 当变量等于值2时执行的代码
        break;
    default:
        // 当变量不等于任何已定义的值时执行的代码
        break;
}

示例代码:

csharp
int day = 2;

switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    default:
        Console.WriteLine("无效的星期");
        break;
}

在这个例子中,switch​ 语句用于根据变量 day​ 的值选择不同的输出。

说明:

  • switch​ 语句中的 case​ 必须是常量或字面量。
  • break​ 语句用于结束当前 case​,防止代码继续执行到下一个 case​。
  • default​ 是可选的,用于处理所有不匹配 case​ 的情况。
  • switch​ 适合用于值有限且清晰的多分支判断。

4. 三元运算符(Ternary Operator)

三元运算符是一个简洁的条件判断表达式,用于在单行代码中实现简单的条件判断。它的形式类似于 if-else​,但适合于返回一个值。

语法:

csharp
条件 ? 表达式1 : 表达式2;
  • 如果条件为 true​,则执行 表达式1​;
  • 如果条件为 false​,则执行 表达式2​。

示例代码:

csharp
int number = 10;
string result = number > 0 ? "正数" : "非正数";
Console.WriteLine(result);  // 输出:正数

在这个例子中,根据 number​ 是否大于零来决定 result​ 的值。

说明:

  • 三元运算符适合用于简单的条件判断,能够使代码更加简洁。
  • 不适合用于复杂的条件判断,以避免影响代码的可读性。

5. if​ 表达式简化

在 C# 中,部分简单的条件判断可以通过其他方式简化,以提高代码的可读性和简洁性。除了三元运算符,还有一些特殊用法,比如使用 &&​ 和 ||​ 等逻辑运算符。


5.1 使用逻辑运算符简化 if​ 条件

逻辑运算符 && ​(AND)和 || ​(OR)可以用于组合多个条件,使代码更简洁。通常用于简单的多条件判断,而不需要嵌套多个 if​ 语句。

示例代码:

csharp
int age = 25;
bool isAdult = age >= 18 && age <= 65;

if (isAdult)
{
    Console.WriteLine("成年人");
}
else
{
    Console.WriteLine("未成年或老人");
}

在这个例子中,age​ 的判断可以使用逻辑 &&​ 运算符合并为一个条件,避免多层 if​ 嵌套。

逻辑运算符:

  • && ​(与):所有条件为 true​ 时,表达式结果为 true​。
  • || ​(或):只要有一个条件为 true​,表达式结果就为 true​。
  • ! ​(非):将布尔值取反。

5.2 空合并运算符 ??

空合并运算符 ?? ​ 用于简化对 null​ 值的处理。当第一个操作数为 null​ 时,返回第二个操作数。

示例代码:

csharp
string name = null;
string displayName = name ?? "未知用户";

Console.WriteLine(displayName);  // 输出:未知用户

如果 name​ 为 null​,则 displayName​ 将取值为 "未知用户"​。

说明:

  • 空合并运算符特别适用于处理 null​ 值的默认值情况,避免冗长的 if​ 检查。

5.3 空条件运算符 ?.

空条件运算符 ?. ​ 用于安全地调用对象的成员,而无需显式检查对象是否为 null​。如果对象为 null​,则整个表达式返回 null​,而不会引发 NullReferenceException​。

示例代码:

csharp
Person person = null;
string name = person?.Name ?? "未知姓名";

Console.WriteLine(name);  // 输出:未知姓名

在这个例子中,person?.Name​ 只会在 person​ 不为 null​ 的情况下访问 Name​ 属性,避免了直接访问 null​ 对象导致的异常。


6. 总结

C# 提供了多种条件判断方式,适用于不同的编程场景。总结如下:

  • if-else语句:用于基本的条件判断,适合简单和复杂的逻辑。
  • 嵌套 if语句:用于更复杂的多层条件检查,但应避免嵌套过深。
  • switch语句:适用于多值判断,特别是当判断的值数量有限时,可以替代多重 if-else​。
  • 三元运算符:适合简单的条件判断和赋值操作,简化代码结构。
  • 逻辑运算符:用于组合多个条件,简化复杂的 if​ 判断。
  • 空合并运算符 ?? ​:用于处理 null​ 值时的默认赋值,避免冗长的 if-else​ 判断。
  • 空条件运算符 ?. ​:安全访问对象的成员,避免 null​ 引发的异常。

熟练掌握这些条件判断语句与运算符能够使代码更加简洁、易读,同时也能提高代码的安全性。

Released under the MIT License.