2012年11月9日 星期五

[學習] If Else 判斷式 細節注意~

AndAlso運算子


問題(Problem):
從資料庫撈資料時~
若某資料型態為日期(or 其它特殊型態)時~
用 Foor-loop or while-loop 取得資料列(並顯示在畫面上)~
用以下的 If判斷式 會出錯~

答案(Answer):
因為 If 判斷式~ 在判斷時會同時判斷 i是否符合條件 以及 arr(i + 1)是否符合條件~
故在此判斷式~ 便會出錯~
從字串 "XXXX" 至型別 'Date' 的轉換是無效的。

For i As Integer = 1 To 10
     If i = 3 And CDate(arr(i + 1)).ToShortDateString = "1900/1/1" Then
          C.Text = "尚無資料"
     End If
Next

需更改為
當判斷 i不符合時~ 就不會再判斷 arr(i + 1) 是否符合~
(1)
For i As Integer = 1 To 10
     If i = 3 Then
          If CDate(arr(i + 1)).ToShortDateString = "1900/1/1" Then
               C.Text = "尚無資料"
          End If
     End If
Next

或者
當更改判斷式 If AndAlso 判i不符合~ 就不會再判斷 arr(i + 1) 是否符合~
(2)

For i As Integer = 1 To 10

     If i = 3 And CDate(arr(i + 1)).ToShortDateString = "1900/1/1" Then
          C.Text = "尚無資料"
     End If

Next


或者
在判斷式之前 必須判斷 arr(i+1) 是否為日期型態
(3)
For i As Integer = 1 To 10

If IsDate(arr(i + 1)) = True Then
     '是日期型態
     If i = 3 And CDate(arr(i + 1)).ToShortDateString = "1900/1/1" Then
          C.Text = "尚無資料"
     End If
Else
     '不是日期型態
End If
Next


參考:

運算子 AndAlso 和 OrElse
VB.NET's Logical Operators AndAlso and OrElse









沒有留言:

張貼留言