【发布时间】:2012-04-28 07:07:41
【问题描述】:
我正在编写一个程序,该程序需要执行搜索作为必需功能之一。用户应该能够使用任意数量的字段,范围从没有到全部(总共 7 个)。到目前为止,我已经成功地将每个数据输入案例分组到一个 if 语句中,如下所示:
List<TypeClass> myList = new List<TypeClass>
foreach TypeClass currentItem in myList
{
if (data1 == currentItem.GetData1() || data1 == "Do Not Search" && (data2 == currentItem.GetData2() || data2 == "Do Not Search") && (data3...)
{
//Stuff
}
}
如果您注意到,我将每个数据字段分组在括号内,因此只有当输入的每个数据都是所需条件或“空字段”时,才能满足该语句。但是,我不能像对其他数据 2、3、4 那样对语句的第一部分进行分组...相反,即使有其他搜索字段不满足该声明。如果我使用额外的括号,程序将完全忽略 if 语句并将其视为根本没有任何情况匹配。
所以如果我这样写:
if ((data1 == currentIten.GetData1 || data1 == "Do Not Search") && (data2...)
没有检查任何内容,并且该语句被忽略。这是正常的吗?有没有更好/更有效的方法来处理可选的搜索字段选择?
编辑:抱歉打错了,每个 GetDataX 都是一个访问器,我忘了写括号 ()
【问题讨论】:
-
我猜测在您提供给我们的代码之外发生了一些事情。你确定
data1设置正确吗? -
是的,所有数据都在那里,实际检查它是我现在的问题。如果我在开头取出双括号并只用一个替换它,一切正常,但它没用,因为如果数据 1 评估为真,但任何其他数据没有,则不管怎样,整个语句都将评估为真。
-
当然你需要在 data1 条件周围加上括号。仔细检查值。其中一个 dataX 不匹配,将整个表达式评估为假。将 if 重写为一系列嵌套的 if,单步执行并查看不匹配的位置。
-
@ad 我仍然不相信。您的第一个
if不正确,因为&&的操作顺序高于||,将首先评估。我会三次检查data1是否设置为您列表中存在的值或确切的"Do Not Search"字符串。 -
对不起,我不知道你是否理解我的问题。如果我在 data1 周围加上额外的括号,则不会检查任何内容。至于检查值,我目前正在测试仅对 data1 的搜索,所以我写了一个 'string checkData1 = currentItem.GetData;'就在 If 语句之前,是的,它肯定匹配。因此,data1 是我目前唯一的变量,因为其他所有字段都有“请勿搜索”选项。
标签: c# if-statement conditional-statements