【问题标题】:How do I shorten this C# code when having many if conditions in a single statement在单个语句中有多个 if 条件时如何缩短此 C# 代码
【发布时间】:2019-06-10 15:53:44
【问题描述】:

我正在使用此功能来检查某些隐私政策是否显示在 UI 中。如果显示 x 策略,则单击“我同意”按钮进入下一页检查是否显示 y 策略。如果未显示,则标记错误。此过程将重复,直到检查所有策略。

我们有 4 项隐私政策,我们可以打开或关闭它们。所以有时 2 或 3 个策略只会出现而不是 4 个。如果 2 或 3 个策略只显示那很好,不应该打破测试。因此所有的 if 。有什么我可以用的东西来代替这么多的 if 吗?我觉得我在一个方法下有很多 if 。

public static void CheckPolicy(bool privacyPolicy1Expected = true, bool privacyPolicy2Expected = true, bool privacyPolicy3Expected = true, bool privacyPolicy4Expected = true)
    {
        if (privacyPolicy1Expected) { PP1AgreementValidation(); }
        if (!privacyPolicy1Expected) { App.AssertElementNotPresent(_privacyPolicy1Header); }
        if (privacyPolicy2Expected) { PP2AgreementValidation(); }
        if (!privacyPolicy2Expected) { App.AssertElementNotPresent(_privacyPolicy2Header); }
        if (privacyPolicy3Expected) { PP3AgreementValidation(); }
        if (!privacyPolicy3Expected) { App.AssertElementNotPresent(_privacyPolicy3Header); }
        if (privacyPolicy4Expected) { PP4AgreementValidation(); }
        if (!privacyPolicy4Expected) { App.AssertElementNotPresent(_privacyPolicy4Header); }    
    }

我没有收到任何错误。代码工作正常。我只需要缩短一点或使用不同的函数来缩短代码。

【问题讨论】:

  • 这更适合代码审查。
  • 您可以将 if (!privacyPolicy1Expected) 替换为 else。
  • 布尔表达式?表达式1:表达式2
  • 我同意 codereview 更好。如果您只是有一个代表这些策略的集合并且您在每个策略上调用方法,那么这将变得更短。换句话说,多态性。
  • 代码长八行。 为什么它必须更短

标签: c#


【解决方案1】:

您正在检查一个条件是否为真,然后再次检查它是否为真。您可以将其重写为if else

 if (privacyPolicy1Expected) { PP1AgreementValidation(); }
 if (!privacyPolicy1Expected) { App.AssertElementNotPresent(_privacyPolicy1Header); }

变成:

if (privacyPolicy1Expected) 
{ 
    PP1AgreementValidation(); 
}
else 
{ 
    App.AssertElementNotPresent(_privacyPolicy1Header); 
}

【讨论】:

  • 正确格式的奖励积分。很多地方的代码标准中不允许使用单行 if。
【解决方案2】:

如果您想真正缩短它,我建议使用三元运算符

privacyPolicy1Expected ? PP1AgreementValidation() : App.AssertElementNotPresent(_privacyPolicy1Header);

它就像一个紧凑的 If/Else 语句。它测试“?”之前的条件如果为true,则执行“:”之前的代码,如果为false,则将执行“:”之后的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 2022-06-15
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多