2009/9/22

[VB][C#] AndAlso 與 OrElse

我想這是許多初學者會遇上的問題;請先看以下的例子:

Dim lbTest As Label = GridView1.FindControl("lbTest")
If (lbTest IsNot Nothing) And lbTest.Text = "(Empty)" Then
   ...

依照邏緝,你可能以為,如果 lbTest 是 Nothing 或 Null (在 GridView1 中找不到),那麼後面那道指令 (lbTest.Text = "(Empty)") 就不會被執行。不過事實上,如果 lbTest 確實是 Nothing,那麼你會遇到 Runtime 時期的 Null Reference 錯誤。這是因為 lbTest IsNot Nothing 和 lbTest.Text = "(Empty)" 這兩道指令無論如何都會被同時執行到,並不會因為前面判斷式不成立,後面的判斷式就不會被進行評估。

要解決這個問題,你就應該使用 AndAlso 而不是 And。同樣的,在 Or 的情況下,則應該使用 OrElse。因此以上程式應該改寫為:

Dim lbTest As Label = GridView1.FindControl("lbTest")
If (lbTest IsNot Nothing) AndAlso lbTest.Text = "(Empty)" Then
   ...

如果你使用 C# 的話,你恐怕會找不到 AndAlso 和 OrElse 這兩個指令。在 C# 中,它們是以 && 和 || 來代表。你可以在以下網頁中看到 C# 的實際範例:

http://www.c-sharpcorner.com/UploadFile/jaishmathews/AndAlsoOrElseOperatorsinCSharp03112006104809AM/AndAlsoOrElseOperatorsinCSharp.aspx

Technorati 的標籤:,,,

沒有留言:

張貼留言