C# 如何在C中组合多个IF语句#
我这里有一些有缺陷的逻辑。我的目标是,如果所有字段都有“”值,则返回true,否则返回false。如何在C#中修复此问题C# 如何在C中组合多个IF语句#,c#,selenium-chromedriver,C#,Selenium Chromedriver,我这里有一些有缺陷的逻辑。我的目标是,如果所有字段都有“”值,则返回true,否则返回false。如何在C#中修复此问题 我相信这样的办法应该行得通。我找不到所有这些变量都属于哪个类,但用合适的类替换var,我认为这应该可以 逻辑:将所有变量添加到列表中,使用lambda函数返回是否所有列表都匹配GetAttribute(“值”)=“” //将var替换为类类型或父类 List allFields=新列表{smtpHostInputField、smtpPortInputField、sername
我相信这样的办法应该行得通。我找不到所有这些变量都属于哪个类,但用合适的类替换var,我认为这应该可以 逻辑:将所有变量添加到列表中,使用lambda函数返回是否所有列表都匹配GetAttribute(“值”)=“”
//将var替换为类类型或父类
List allFields=新列表{smtpHostInputField、smtpPortInputField、sernameInputField、passwordInputField、senderInputField、ReceiveInputField};
foreach(所有字段中的var字段){Driver.WaitForElementValueNull(字段);}
返回allFields.All(t=>t.GetAttribute(“值”)==”;
另一种解决方法是将WaitForElementValueNull
调用和空字符串检查提取到一个单独的方法。诸如此类:
private static bool WaitForElementValueNullAndEmpty(InputFieldType inputField)
{
Driver.WaitForElementValueNull(inputField);
return inputField.GetAttribute("value") == "";
}
public bool CheckFieldsAreEmpty()
{
return WaitForElementValueNullAndEmpty(smtpHostInputField) ||
WaitForElementValueNullAndEmpty(smtpPortInputField) ||
WaitForElementValueNullAndEmpty(usernameInputField) ||
WaitForElementValueNullAndEmpty(passwordInputField) ||
WaitForElementValueNullAndEmpty(senderInputField) ||
WaitForElementValueNullAndEmpty(receiverInputField);
}
上述代码将与所提供的算法相匹配,但是如果您想检查所有值是否为空,则< > > > < >代码>应被替换为<代码> & & < /代码>(如Jeremy Caney所注意到的)
< P>来说明评论中的@ MaldRead(正确)建议,请考虑此代码:public bool CheckFieldsAreEmpty()
{
Driver.WaitForElementValueNull(smtpHostInputField);
if (smtpHostInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(smtpPortInputField);
if (smtpPortInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(usernameInputField);
if (usernameInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(passwordInputField);
if (passwordInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(senderInputField);
if (senderInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(receiverInputField);
if (receiverInputField.GetAttribute("value") != "")
return false;
return true;
}
当然,正如所强调的,您可以使用循环或LINQ查询来集中这个重复的逻辑。反转测试。如果第一个字段不是空的,则整个条件失败,因此返回false,依此类推。如果所有内容都未通过非空测试,则返回true。嗯,但我要查找的是某种类型的AND,因此如果字段#2、字段#3和字段#4为value=“”,则返回true。@hedda这正是等待所有测试完成而不返回
false
-如果到达末尾,1、2、3、4、5和6一定都通过了测试。仅供参考:我将@madreflection的评论与代码示例结合起来作为答案,以帮助说明他们的建议。这将使我们更容易通过它的工作原理进行推理。(因为我没有提出,所以我把它标记为一个社区wiki。)我还包括了一个简写,用于集中重复代码。它将是All
,而不是Any
。如果它们都是空的,OP希望为true。@很好的一点是OP按照您描述的方式声明了它,然后为任何一个都编写了伪代码。不确定是哪一个OP在寻找。在顶部有明确的说明:“我的目标是如果所有字段都有”“value然后返回true”,在此之前,“我这里有一些有缺陷的逻辑”,很明显,代码并不能可靠地表示他们想要什么。这些应该是&&
,因为OP试图解决的问题是确定所有值是否为空。我正在尝试此解决方案,但不能完全弄清楚InputFieldType应该是什么?
private static bool WaitForElementValueNullAndEmpty(InputFieldType inputField)
{
Driver.WaitForElementValueNull(inputField);
return inputField.GetAttribute("value") == "";
}
public bool CheckFieldsAreEmpty()
{
return WaitForElementValueNullAndEmpty(smtpHostInputField) ||
WaitForElementValueNullAndEmpty(smtpPortInputField) ||
WaitForElementValueNullAndEmpty(usernameInputField) ||
WaitForElementValueNullAndEmpty(passwordInputField) ||
WaitForElementValueNullAndEmpty(senderInputField) ||
WaitForElementValueNullAndEmpty(receiverInputField);
}
public bool CheckFieldsAreEmpty()
{
Driver.WaitForElementValueNull(smtpHostInputField);
if (smtpHostInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(smtpPortInputField);
if (smtpPortInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(usernameInputField);
if (usernameInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(passwordInputField);
if (passwordInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(senderInputField);
if (senderInputField.GetAttribute("value") != "")
return false;
Driver.WaitForElementValueNull(receiverInputField);
if (receiverInputField.GetAttribute("value") != "")
return false;
return true;
}