我是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语句中还有很长时间。有没有更简单的格式化方法?
答案 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;
}
我一直使用这个"所有的时间"用于设置默认值,或者当某些变量不包含我期望的值时,将某些变量返回到默认值。