← SEARCHABLE ARCHIVE
C# · 2026-07-17

从 C# 基础到掌握 — 第 2 集

使用条件语句、循环和方法创建流

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

程序不仅仅以存储值结束。 您需要根据条件执行不同的代码,重复相同的任务,并将方法划分为有意义的单元。

条件语句和开关

string GetState(int health)
{
    if (health <= 0)
    {
        return "Dead";
    }

    return health < 30 ? "Danger" : "Normal";
}

int reward = rank switch
{
    "S" => 1000,
    "A" => 500,
    _ => 100
};

对于简单的双管脚来说,if 更容易阅读,而 switch 在将一个值与多个情况进行比较时效果很好。 _ 是不符合任何前述模式的剩余情况。

环形

var damages = new[] { 10, 20, 15 };
int total = 0;

foreach (int damage in damages)
{
    if (damage <= 0)
    {
        continue;
    }

    total += damage;
}

foreach 方便按顺序读取元素。 如果需要索引或者需要直接控制重复的范围,请使用for。

在循环中添加或删除集合的元素可能会使枚举无效。 单独收集要删除的对象或从后面遍历它们会更安全。

方法和早期回报

bool TryAttack(Player attacker, Monster target, out int damage)
{
    damage = 0;

    if (!attacker.IsAlive || !target.IsAlive)
    {
        return false;
    }

    damage = Math.Max(1, attacker.Attack - target.Defense);
    target.TakeDamage(damage);
    return true;
}

如果返回无法先处理的输入,则正常流程的缩进不会加深。 out参数可用于返回成功或失败以及计算结果。

方法名称应该揭示调用者的意图而不是内部实现。 当条件和迭代变长时,最好确保每个方法只有一个职责,而不是简单地减少行数。