(OrElse和Or)和(AndAlso and And)有什麼區別? 他們的表演有沒有什麼區別,比方說正確性的好處?有什麼情況我不應該使用OrElse和AndAlso?(OrElse and Or)和(AndAlso and And) - 何時使用?
回答
Or/And
將總是評估都 表達式,然後返回結果。他們是而不是短路。
OrElse/AndAlso
是short-circuiting。只有在評估結果不能單獨評估左側表達時才能評估正確的表達。 (這意味着:如果左表達式爲假OrElse
將僅評估合適的表情,並且如果左表達式爲真AndAlso
將僅評估合適的表情。)
假設沒有副作用發生在表達式和表達式不依賴於(並且忽略任何執行開銷),則它們是相同的。
但是,在很多情況下,表達式與相關。舉例來說,我們想要做的事時,列表不,沒有,有一個以上的元素:(!或副作用,ICK)
If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff
這也可以用來避免「昂貴」計算:
If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid
就個人而言,我發現AndAlso
和OrElse
是正確運營商都使用,但在1% - 或更小,有希望! - 期望的副作用是的情況。
快樂編碼。
在第一表達式將防止從被評估的第二表達拋出的異常,但這應該幾乎不奇怪..
的區別在於OrElse運算和AndAlso將短路基於在第一個條件下,這意味着如果第一個條件沒有通過,第二個(或更多)條件將不會被評估。當其中一個條件可能比另一個條件更密集時,這是特別有用的。
例子Or
是好的(兩個條件評估):
If Name = "Fred" Or Name = "Sam" Then
這真的並不重要的方式圍繞它們進行評估
以下AndAlso
是有用的,因爲第二個條件可能會失敗
If Not SomeObject Is Nothing AndAlso CheckObjectExistsInDatabase(SomeObject) Then
這允許第一條件檢查對象是否已被設置並且在如果已設置,將會去檢查數據庫(或其他任務)。如果這是一個普通的And
關鍵字,則兩者都將被評估。
除了在其他的答案中提到的短路,Or
/And
可用作位運算符,其中OrElse
/AndAlso
不是。按位操作包括組合Flags枚舉的值,例如FileAttributes枚舉,您可能指出文件既是隻讀也是隱藏的。FileAttributes.ReadOnly Or FileAttributes.Hidden
@Gideon - 很高興有人指出。下面是一個簡單的測試,顯示AndAlso的巨大影響:
Dim tm As New Stopwatch
Const tries As Integer = 123456
Dim z As Integer = 0
Dim s() As String = New String() {"0", "one"}
Debug.WriteLine("AndAlso")
For x As Integer = 0 To s.Length - 1
z = 0
tm.Restart() 'restart the stopwatch
For y As Integer = 0 To tries
If s(x) = x.ToString AndAlso s(x) = y.ToString Then '<<<<<<<<<<
z += 1
End If
Next
tm.Stop()
Debug.WriteLine(x.ToString.PadRight(3, " "c) & z.ToString.PadRight(10, " "c) & tm.Elapsed.ToString)
Next
Debug.WriteLine("And")
For x As Integer = 0 To s.Length - 1
z = 0
tm.Restart() 'restart the stopwatch
For y As Integer = 0 To tries
If s(x) = x.ToString And s(x) = y.ToString Then '<<<<<<<<<<
z += 1
End If
Next
tm.Stop()
Debug.WriteLine(x.ToString.PadRight(3, " "c) & z.ToString.PadRight(10, " "c) & tm.Elapsed.ToString)
Next
的[?我應該總是使用AndAlso和OrElse運算經營者(
- 1. Dynamic PDO AND and OR
- 2. mysql用AND和OR
- 3. MySQL使用LIKE,AND和OR
- 4. OR和AND運算
- 5. SQL WHERE,OR和AND
- 6. C++ And Or Boolean
- 7. JAVA:邏輯AND/OR和短路AND/OR有什麼區別?
- 8. MySQL高級查詢多個AND AND OR
- 9. 如何篩選使用OR和AND
- 10. Rails .where使用AND/OR
- 11. AND和OR在Mongo查詢
- 12. 禁用AND和OR關鍵字
- 13. SQL查詢OR和AND
- 14. PHP Try and Catch or @
- 15. SQL操作符:AND和OR
- 16. Clang AST Matcher的「AND」和「OR」
- 17. While Loops(And,Not,Or)
- 18. LINQ AND OR邏輯
- 19. 結合AND和OR語句
- 20. IF 'AND' 和 'OR' 語句
- 21. Mysql「where」and「or」statement
- 22. Oracle查詢與AND和OR
- 23. OR和AND的區別?
- 24. And + Or in Or Select Select-Statement
- 25. LINQ查詢AND&OR
- 26. excel countifs與AND&OR
- 27. SSRS條件格式(使用AND和OR)
- 28. Drupal 7 WHERE使用OR和AND
- 29. 在SQL查詢中使用「AND」和「OR」
- 30. 庫MySQLi PHP中使用OR和AND
可能重複http://stackoverflow.com/questions/55013/should-i -always-use-the-and-one-and-orelse-operators) –
剛開始使用VB.NET(VB多年來第一次)。我上網只是爲了問這個具體問題。感謝@aer和許多人以他們的傑出答案作了澄清。 – Hardryv