2.2 基础语法与控制流
基础语法决定你能否准确表达业务规则。学习 C# 时不要只记语法形式,要把每个语法点和真实输入、输出、边界条件联系起来。
学习目标
- 能声明变量、常量和方法。
- 能使用条件分支表达业务规则。
- 能使用循环处理集合数据。
- 能把重复逻辑提取为方法。
应用场景
- 校验创建任务请求是否合法。
- 根据优先级计算任务排序权重。
- 遍历任务列表并生成统计信息。
- 把复杂条件拆成可读的方法。
核心概念
| 概念 | 说明 |
|---|---|
| 变量 | 存储运行时变化的数据 |
| 常量 | 存储不应改变的固定值 |
| 条件 | 根据不同输入执行不同逻辑 |
| 循环 | 对一组数据重复执行逻辑 |
| 方法 | 给一段可复用逻辑命名 |
案例:校验任务标题
public static ValidationResult ValidateTitle(string? title)
{
const int maxLength = 120;
if (string.IsNullOrWhiteSpace(title))
{
return ValidationResult.Fail("标题不能为空");
}
if (title.Length > maxLength)
{
return ValidationResult.Fail($"标题不能超过 {maxLength} 个字符");
}
return ValidationResult.Success();
}
public sealed record ValidationResult(bool IsValid, string? Message)
{
public static ValidationResult Success() => new(true, null);
public static ValidationResult Fail(string message) => new(false, message);
}
示例:遍历和统计
public static int CountOverdueTodos(IEnumerable<TodoItem> todos, DateOnly today)
{
var count = 0;
foreach (var todo in todos)
{
if (!todo.IsCompleted && todo.DueDate < today)
{
count++;
}
}
return count;
}
public sealed record TodoItem(string Title, bool IsCompleted, DateOnly DueDate);
重点难点
- 条件判断要先处理非法输入,再处理正常路径。
- 方法名应表达业务含义,而不是实现细节。
- 循环中修改集合要谨慎,可能导致枚举异常或跳过元素。
var不是动态类型,变量类型仍由编译器确定。
常见误区
| 误区 | 推荐做法 |
|---|---|
把所有逻辑写在 Main 或路由中 | 提取方法并命名业务意图 |
| 条件嵌套过深 | 优先使用早返回减少缩进 |
| 忽略空字符串和边界长度 | 先定义输入规则,再写判断 |
练习
- 写一个方法判断任务是否逾期。
- 写一个方法按优先级返回排序权重。
- 把一个三层嵌套
if改成早返回写法。
延伸阅读
- C# 语言基础。
- 方法参数和返回值。
- 代码可读性和命名规范。