2012-08-15 60 views
-3

我編寫了下面的代碼,用C#中的表單從組件中檢查輸入的數據。我如何執行代碼中的所有功能?

該代碼調用每個返回布爾值的函數。如果檢查確定,則函數返回false,否則返回true。

如果我的用戶沒有正確完成任何輸入,第一個代碼檢查函數返回true,其他函數調用將被跳過。

即使返回true,我該如何避免跳過其他函數調用?

命名約定:

  • 變量starst與 'TXT' 是文本框
  • 變量與星 '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); 
+6

爲什麼你希望它執行的後來者?如果我正確理解問題,只需用'|'替換'||'即可,但爲什麼? – Random832 2012-08-15 20:54:40

+1

你能解釋一下你真的想要做什麼..?看起來,你得到-7或更多的否定票後再次打開/重新發布相同的問題..請說明你正在嘗試做什麼 – MethodMan 2012-08-15 20:55:32

+0

@ Random832這是一個很好的答案:)至於「爲什麼」,我會假設它可能是'txtChecker'的可能副作用(例如,當輸入無效時寫入日誌)。 – dasblinkenlight 2012-08-15 20:55:40

回答

0

您正在運行短語的表達式;如果OR(||)的第一部分爲真,則不需要評估第二部分。 AND有一個類似的規則(& &),如果第一部分爲假,則不評估第二部分。這是通過設計,並且是該語言的一個非常有用的特徵。

對代碼進行最簡單的更改以確保您的所有檢查都被評估爲交換測試順序,並將檢查排在||運算符的左側。

allIsOK = checker.txtChecker(txtcode) ; 
allIsOK = checker.txtChecker(txtdavar) || allIsOK; 
allIsOK = checker.txtChecker(txtKomakHazine) || allIsOK; 
// etc etc 
+0

感謝您的完整答案。在評論中,我發現如果使用二進制或(|)所有這些將執行。 – user1562312 2012-08-15 21:07:19

+1

StackOverflow(和其他Stack Exchange站點)習慣於「接受」你認爲最有用的答案(尋找綠色的勾號),並提出你認爲有幫助的答案。 – Bevan 2012-08-15 21:10:09

+1

如果變量沒有被稱爲'allIsOK',因爲你的建議(以及OP的代碼)計算「是任何檢查通過」,因爲我沒有讀到「一切正常」,所以會是+1。 – 2012-08-15 21:11:27

1

allIsOK = allIsOK && checker.txtChecker(txtdavar); //not|| 
相關問題