多个选项的最有效条件语句?

时间:2016-06-13 13:27:08

标签: c# selenium

我是c#的新手并尝试制作一个条件语句,我正在检查我的脚本应该在网页上选择哪个选项。现在我正在这样做,我已经为每个选项制作了单独的bool语句,并且我有一个很长的if if语句检查每个选项。

bool PersonalPolicy = true;
bool FarmOwnersPolicy = true;

if (PersonalPolicy)
{
   driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_0")).Click();
}
else
{
   driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_radioListCommOrPersonal_1")).Click();
}
if (FarmOwnersPolicy)
{
   driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_0")).Click();
}
else if (SelectoMaticPolicy)
{
   driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_1")).Click();
}
else
{
   driver.FindElement(By.Id("cphMain_ctl_WorkflowManager_Quote_Farm_ctl_Farm_Basic_Policy_Info_rdoPolicyType_2")).Click();
}

问题在于我想检查的一些事情有很多选项,我不想做出百万bool语句,并且在if语句中还有很长时间。有没有更简单的格式化方法?

1 个答案:

答案 0 :(得分:2)

这实际上取决于你的实际逻辑。 而且我担心这个问题可能会被标记,因为它可能过于笼统。"

但是,还有很多方法可以检查多个州。

如果您希望在多次检查时只有一个结果(即您希望返回EITHER PersonalPolicy,FarmOwnersPolicy或SelectoMaticPolicy),我个人可能会设置一个" PolicyType"变量并在其上执行switch语句。例如:

switch(PolicyType){
    case "PersonalPolicy":
        // Code specific to PersonalPolicy
        break; // Don't forget to break unless you want to use "fallthrough logic"
    case "FarmOwnersPolicy":
       // Code specific to PersonalPolicy
       break ;
    case default:
       // Code for "any-other-than" cases :)
       break;
}

然而,为了使这种方法在您的情况下可行,您必须将您的单独bool解析为某个等效的执行级别或错误级别。

然而,也可以将多个条件链接到更大的单个语句。 最常见的例子是使用&& amp;或||在每个陈述之间暗示" AND"或"或"。在比较多个bool时,特别是对OR语句应用逆逻辑可以证明是强大的

示例:

if ( PersonalPolicy ) { }
else { }

if (FarmOwnersPolicy && !SelectomaticPolicy ) {
    //Will only be executed if FarmOwnersPolicy is True AND SelectomaticPolicy is NOT true.
}

if (!FarmOwnersPolicy && !SelectomaticPolicy) {
    // Will only be executed if FarmOwnersPolicy AND SelectomaticPolicy are both unset
}

if (!FarmOwnersPolicy || !SelectomaticPolicy) {
    // Will  be executed if either FarmOwnersPolicy OR SelectomaticPolicy is unset
}

当您有多个条件要立即检查并提供潜在的可读性时,后一种方法可能会更有用,而不是无穷无尽的if-else。

如果我有一个(似乎是)无穷无尽的支票",我通常会尝试分解每个"设置"块中的布尔检查和单个结果变量。

很难为此提供一个很好的例子,但想象一下,我们有一个huuuuge形式(为简单起见),其中有一个地址部分,等等。我可能想先查看所有地址信息,并将其复合到" AddressValid" bool,仅用于提高其他部分的可读性:) 此外,如果顺序布尔逻辑的一部分会破坏,那么回读这个代码正在做什么"这可能不那么麻烦。当你还没有触及那段代码时。

编辑:

还有Conditional(Ternary)运算符。 在以下示例中使用时:

TestCase ? Value1 : Value2;

它产生以下逻辑:

If (TestCase ){
    return Value1;
}
Else {
    return Value2;
}

我一直使用这个"所有的时间"用于设置默认值,或者当某些变量不包含我期望的值时,将某些变量返回到默认值。