c# - 使用 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 语句并不重要。我只是想要一个明确的解决方案。
解决方案
您只需将一个布尔标志传递给您的 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;
}
}
推荐阅读
- python - 如何从python中的函数cgi.escape()中获取str
- sql - 如何消除 SQL 查询的结果并仅获取某些非重复信息?
- amazon-web-services - 尽管允许“s3:GetObject”操作,但来自 S3 的 403
- android - 如果函数运行超过指定时间,则中断函数
- python - 如何将http附件转换为文件?
- tensorflow - 使用 tensorflow-gpu 时如何使用 nvdia 显卡而不是 Intel?
- dart - Flutter:如何访问子页面中的 ScopeModel 属性
- javascript - 如何仅通过一个 API 调用查询谷歌地方的多个地址?
- java - 问题:无法将 java.lang.String 类型的对象转换为类型
- r - 识别仅包含 r 中某些字符串的向量元素