-3

C# のフォームでコンポーネントから入力されたデータをチェックするために、以下のコードを書きました。

このコードは、それぞれがブール値を返すいくつかの関数を呼び出します。check が OK の場合、関数は 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 (||) の最初の部分が true の場合、2 番目の部分の評価は必要ありません。AND (&&) にも同様のルールがあり、最初の部分が false の場合、2 番目の部分は評価されません。これは仕様によるものであり、言語の非常に便利な特性です。

すべてのチェックが確実に評価されるようにコードを変更する最も簡単な方法は、テストの順序を入れ替えて、チェックを||演算子の左側に配置することです。

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