404 Not Found

404 Not Found


nginx

条件判断

if 语句

if 语句根据布尔表达式的结果决定是否执行代码块。条件为 true 时执行,为 false 时跳过。

CSHARP
int score = 85;
if (score >= 60)
{
    Console.WriteLine("及格了");
}
TEXT
及格了

if...else 语句

当条件为 true 执行一个分支,为 false 执行另一个分支,使用 if...else 结构。

CSHARP
int age = 16;
if (age >= 18)
{
    Console.WriteLine("已成年");
}
else
{
    Console.WriteLine("未成年");
}
TEXT
未成年

if...else if 多分支

需要判断多个互斥条件时,使用 else if 依次检查,只会执行第一个匹配的分支。

CSHARP
int score = 78;
if (score >= 90)
{
    Console.WriteLine("优秀");
}
else if (score >= 80)
{
    Console.WriteLine("良好");
}
else if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}
TEXT
及格

嵌套 if

if 语句可以嵌套使用,但建议嵌套不超过两层,过深嵌套会降低可读性,应考虑提取方法或改用 else if。

示例

CSHARP
int age = 25;
bool hasTicket = true;
if (age >= 18)
{
    if (hasTicket)
    {
        Console.WriteLine("可以入场");
    }
    else
    {
        Console.WriteLine("需要购票");
    }
}
else
{
    Console.WriteLine("年龄不足");
}
▶ 试一试
TEXT
可以入场

switch 语句

switch 语句将一个表达式与多个常量值匹配,执行对应 case 分支。C# 不允许像 C/C++ 那样的穿透执行,每个 case 必须以 break、return 或 throw 结束,否则编译报错。

示例

CSHARP
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    case 4:
        Console.WriteLine("星期四");
        break;
    case 5:
        Console.WriteLine("星期五");
        break;
    default:
        Console.WriteLine("周末");
        break;
}
▶ 试一试
TEXT
星期三

多个 case 共享同一段逻辑时,可以连续列出 case 标签:

CSHARP
int month = 2;
switch (month)
{
    case 12:
    case 1:
    case 2:
        Console.WriteLine("冬季");
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("春季");
        break;
    default:
        Console.WriteLine("其他季节");
        break;
}
TEXT
冬季
💡 C# 中如果确实需要从一个 case 跳到另一个,必须使用 goto case x,不能省略 break 穿透。

switch 表达式(C# 8+)

C# 8 引入了 switch 表达式,它是一个表达式而非语句,返回匹配结果,语法更简洁。使用 _ 表示默认分支。

示例

CSHARP
int code = 404;
string message = code switch
{
    200 => "OK",
    301 => "Moved",
    404 => "Not Found",
    500 => "Server Error",
    _ => "Unknown"
};
Console.WriteLine(message);
▶ 试一试
TEXT
Not Found

模式匹配初识

C# 7 起支持在条件判断中使用模式匹配,常见形式包括类型模式(is Type variable)和 when 守卫子句。

示例

CSHARP
object obj = "Hello C#";
if (obj is string s)
{
    Console.WriteLine($"字符串长度: {s.Length}");
}
else
{
    Console.WriteLine("不是字符串");
}
▶ 试一试
TEXT
字符串长度: 8

在 switch 中使用 when 守卫添加额外条件:

CSHARP
int value = 15;
string category = value switch
{
    int i when i > 100 => "超大",
    int i when i > 10 => "中等",
    int i when i > 0 => "偏小",
    _ => "无效"
};
Console.WriteLine(category);
TEXT
中等

条件运算符 ?:

条件运算符 ?: 是 if...else 的简写形式,又称三元运算符。语法为 condition ? valueIfTrue : valueIfFalse,整个表达式返回对应值。

示例

CSHARP
int age = 20;
string status = age >= 18 ? "成年" : "未成年";
Console.WriteLine(status);
▶ 试一试
TEXT
成年

嵌套使用(不建议过多嵌套):

CSHARP
int score = 75;
string result = score >= 90 ? "A" : score >= 60 ? "B" : "C";
Console.WriteLine(result);
TEXT
B
⚠️ 条件运算符嵌套超过两层后可读性急剧下降,此时应改用 if...else if 语句。

❓ 常见问题

Q C# 的 switch 可以像 C 语言那样省略 break 穿透执行吗?
A 不可以,C# 不允许 switch 穿透,每个 case 必须以 break/return/throw 结束,否则编译报错;多个 case 共享逻辑可连续列出标签。
Q switch 表达式和 switch 语句有什么区别?
A switch 表达式是表达式,必须有返回值,语法用 => 和逗号分隔;switch 语句是语句,不需要返回值,用 case/break 结构。
Q is== 有什么区别?
A == 比较值是否相等,is 用于模式匹配,可同时判断类型并声明变量,如 obj is string s
Q 条件运算符可以替代所有 if...else 吗?
A 不能,条件运算符只能用于有返回值的场景,且不支持多条语句的逻辑块,复杂逻辑应使用 if...else。

📖 小节

📝 作业

  1. 编写程序,输入一个整数,判断它是正数、负数还是零,并输出对应结果
  2. 使用 switch 表达式,将月份(1-12)映射为对应季节名称
  3. 编写程序,接收一个 object 变量,使用 is 模式匹配判断其类型(int、string 或其他),并输出类型和值
  4. 使用条件运算符将成绩整数转换为等级字母(90以上A、80以上B、60以上C、其余D),并与 if...else if 版本对比可读性
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏