3 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
Or/And將始終評(píng)估雙方1個(gè)表達(dá)式,然后返回結(jié)果。它們不是短路的。
OrElse/AndAlso是短路。僅當(dāng)無(wú)法僅通過(guò)對(duì)左表達(dá)式的評(píng)估無(wú)法確定結(jié)果時(shí),才對(duì)右表達(dá)式進(jìn)行評(píng)估。(這意味著:OrElse僅當(dāng)左表達(dá)式為false AndAlso時(shí)才評(píng)估右表達(dá)式,并且僅當(dāng)左表達(dá)式為true時(shí)才評(píng)估右表達(dá)式。)
假設(shè)表達(dá)式中沒(méi)有副作用,并且表達(dá)式不相關(guān)(并且忽略了任何執(zhí)行開(kāi)銷(xiāo)),則它們是相同的。
但是,在許多情況下,表達(dá)式是從屬的。例如,當(dāng)列表不是-Nothing且具有多個(gè)元素時(shí),我們想做一些事情:
If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff
這也可以用來(lái)避免“昂貴”的計(jì)算(或副作用,?。?/p>
If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid
就個(gè)人而言,我發(fā)現(xiàn),AndAlso和OrElse是正確的運(yùn)營(yíng)商都使用,但在1% -或更小,有希望!- 需要副作用的情況。
快樂(lè)的編碼。
1在第一個(gè)表達(dá)式中引發(fā)異常將阻止對(duì)第二個(gè)表達(dá)式進(jìn)行求值,但這并不奇怪。

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
除了其他答案中提到的短路外,Or/ And還可用作OrElse/ AndAlso而不是/的按位運(yùn)算符。按位操作包括組合Flags枚舉的值,例如FileAttributes枚舉,在該枚舉中您可能表示文件是只讀的,并且被隱藏FileAttributes.ReadOnly Or FileAttributes.Hidden

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
區(qū)別在于OrElse和AndAlso將基于第一個(gè)條件發(fā)生短路,這意味著如果不通過(guò)第一個(gè)條件,則將不評(píng)估第二個(gè)(或更多個(gè))條件。當(dāng)其中一個(gè)條件可能比另一個(gè)條件更為密集時(shí),這特別有用。
哪里Or很好的示例(同時(shí)評(píng)估了兩個(gè)條件):
If Name = "Fred" Or Name = "Sam" Then
評(píng)估它們的方式真的無(wú)關(guān)緊要
以下AndAlso是有用的,因?yàn)榈诙€(gè)條件可能會(huì)失敗
If Not SomeObject Is Nothing AndAlso CheckObjectExistsInDatabase(SomeObject) Then
這使第一個(gè)條件可以檢查是否已設(shè)置對(duì)象,并且只有在設(shè)置了對(duì)象之后,才可以檢查數(shù)據(jù)庫(kù)(或其他任務(wù))。如果這是一個(gè)普通And關(guān)鍵字,則將對(duì)兩個(gè)關(guān)鍵字都進(jìn)行評(píng)估。
- 3 回答
- 0 關(guān)注
- 896 瀏覽
添加回答
舉報(bào)