首页 > 解决方案 > 使用 switch 语句进行加法和减法

问题描述

我的程序中有几个长的开关盒,我需要在开关盒内做减法和加法。我想尽可能地编写干净的代码。我不想每次都复制粘贴并更改+符号以-手动签名。我怎样才能使这成为可能。

这是样本;

private void SetWorkerBonus()
{
    switch (currentWorkerType)
    {
        case WorkerType.Gatherer:
            outputValue += currentWorkerCount * 1.1f;
            break;
        case WorkerType.Hunter:
            defenseAmount += currentWorkerCount * 1.06f;
            break;
        case WorkerType.Cook:
            foodAmount += currentWorkerCount * 1.03f;
            break;
        case WorkerType.Warrior:
            attackAmount += currentWorkerCount * 1.05f;
            break;
    }
}

我希望我的方法是一样的,除了用符号代替+唱歌。-为了进一步澄清,当我为班级设置奖金并更改工人类型时,我想减去我给的奖金然后给出新的奖金类型。

解决方案是否带有/out switch 语句并不重要。我只是想要一个明确的解决方案。

标签: c#optimizationswitch-statement

解决方案


您只需将一个布尔标志传递给您的 SetWorkerBonus。如果为true,则要添加,如果为false,则要减去。现在使用此标志将整数变量初始化为 1 或 -1 并使用此整数乘以围绕currentWorkerCount进行的计算

private void SetWorkerBonus(bool flagToAddOrSubtract)
{
    int multiplier = (flagToAddOrSubtract ? 1 : -1);
    switch (currentWorkerType)
    {
      
        case WorkerType.Gatherer:
            outputValue += ((currentWorkerCount * 1.1f) * multiplier);
            break;
        case WorkerType.Hunter:
            defenseAmount += ((currentWorkerCount * 1.06f) * multiplier);
            break;
        case WorkerType.Cook:
            foodAmount += ((currentWorkerCount * 1.03f) * multiplier);
            break;
        case WorkerType.Warrior:
            attackAmount += ((currentWorkerCount * 1.05f) * multiplier);
            break;
    }
}

推荐阅读