-3

我在下面编写了代码来检查来自 C# 表单中组件的输入数据。

这段代码调用了一些函数,每个函数都返回一个布尔值。如果检查正常,则函数返回 false,否则返回 true。

如果我的用户没有正确完成任何输入,第一个代码检查函数将返回 true,并跳过其他函数调用。

即使一个返回true,我如何避免跳过其他函数调用?

命名约定:

  • 以 'txt' 开头的变量是 TextBox
  • 带有“mtxt”的变量星是 MaskedTextBox
  • 带有 'rtxt' 的变量星是 RichTextBox

代码:

bool allIsOK = false;

allIsOK = checker.txtChecker(txtcode) ;
allIsOK = allIsOK || checker.txtChecker(txtdavar); 
allIsOK = allIsOK || checker.txtChecker(txtKomakHazine);
allIsOK = allIsOK || checker.txtChecker(txtnevisande);
allIsOK = allIsOK || checker.txtChecker(txtonvan); 
allIsOK = allIsOK || checker.txtChecker(txtostadMoshaver);
allIsOK = allIsOK || checker.txtChecker(txtostadRahnama);

allIsOK = allIsOK || checker.richTextBoxChecker(rtxtmaghale);
allIsOK = allIsOK || checker.mtxtDateChecker(mtxtdefa);
allIsOK = allIsOK || checker.mtxtDateChecker(mtxttasvib);
4

2 回答 2

1

allIsOK = allIsOK && checker.txtChecker(txtdavar); //not||
于 2012-08-15T21:01:43.957 回答
0

您遇到了表达式短路;如果 OR (||) 的第一部分为真,则不需要评估第二部分。AND (&&) 也有类似的规则,如果第一部分为假,则不评估第二部分。这是设计使然,并且是该语言的一个非常有用的特性。

确保评估所有检查的最简单的代码更改是交换测试的顺序,将检查放在||运算符的左侧。

allIsOK = checker.txtChecker(txtcode) ;
allIsOK = checker.txtChecker(txtdavar) || allIsOK; 
allIsOK = checker.txtChecker(txtKomakHazine) || allIsOK;
// etc etc
于 2012-08-15T21:00:47.530 回答