VB.NET에서 And
와 의 차이점은 무엇 AndAlso
입니까? 어느 것을 사용해야합니까?
답변
And
연산자 양쪽을 평가 여기서 AndAlso
평가하여 우측 경우 및 좌측에 해당하는 경우에만.
예를 들면 :
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
위의 경우 예외가 발생합니다. mystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
이것은 예외를 던지지 않습니다.
따라서 C # 세계에서 온 사람은을 사용하는 AndAlso
것처럼 사용해야 &&
합니다.
자세한 정보는 여기 : http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/
답변
And
는 조건이 거짓 알고있는 경우 Andalso 운영자가 중지됩니다 반면 운영자는 계속하기 전에 성명에서 모든 조건을 확인합니다. 예를 들면 다음과 같습니다.
if x = 5 And y = 7
x가 5와 같은지 확인하고 y가 7과 같으면 둘 다 참이면 계속합니다.
if x = 5 AndAlso y = 7
x가 5인지 확인합니다. 그렇지 않으면 조건이 이미 거짓임을 알기 때문에 y가 7인지 확인하지 않습니다. 이것을 단락이라고합니다.
일반적으로 사람들은 첫 번째 부분이 사실이 아닌 경우 두 번째 부분을 명시 적으로 확인하지 않는 이유가있는 경우 단락 방법을 사용합니다 (예 : 체크하면 예외가 발생하는 경우). 예를 들면 다음과 같습니다.
If Not Object Is Nothing AndAlso Object.Load()
And
대신을 ( 를) 사용 하는 경우에도 불구하고 AndAlso
계속 시도 하면 예외가 발생합니다.Object.Load()
nothing
답변
흥미롭게 답변 아무도 언급하지 And
및 Or
반면, 비트 연산자이다 VB.NET에서 OrElse
와 AndAlso
엄격 부울 연산자입니다.
Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5
참고 : 0이 아닌 정수가 고려됩니다 true
. 시연 으로 Dim e = not 0
설정 e
됩니다 비트 연산자입니다.-1
Not
||
그리고 &&
합니다 (C #의 버전 OrElse
과는 AndAlso
) 될 마지막 평가 표현 반환 3
하고 5
각각을. 이를 통해 v || 5
C # 의 관용구를 사용하여 is 또는 ( 및 정수) 일 5
때 표현식 의 값으로, 그렇지 않으면 값으로 제공 할 수 있습니다. 시맨틱의 차이점은 VB.NET에서 작동하지 않는 VB.NET 오프 가드에서 C # 프로그래머를 잡을 수 있습니다.v
null
0
v
그래서, 질문에 대답하기 위해 사용 : Or
및 And
비트 연산 (정수 또는 부울)에 대한합니다. 사용 OrElse
및 AndAlso
“단락”작업에 시간을 절약하거나 평가하기 전에 평가의 유효성을 테스트합니다. If valid(evaluation) andalso evaluation then
또는if not (unsafe(evaluation) orelse (not evaluation)) then
보너스 : 다음의 가치는 무엇입니까?
Dim e = Not 0 And 3
답변
If Bool1 And Bool2 Then
Bool1과 Bool2를 평가합니다
If Bool1 AndAlso Bool2 Then
Bool1이 true 인 경우에만 Bool2를 평가합니다.
답변
부작용이 악하다고 말하는 모든 사람들에게있어 : 한 조건에서 두 가지 부작용이 좋은 곳은 두 개의 파일 객체를 함께 읽는 것입니다.
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
를 사용 And
하면 조건을 확인할 때마다 행이 사용됩니다. 반면 AndAlso
에 마지막 줄을 읽고 소비 된 줄없이 File1
남겨 둘 File2
수 있습니다.
물론 코드 위의이 작동하지 않을 것입니다,하지만 난 이런 부작용이 모든 시간을 사용하여 “그것을 고려하지 않을 나쁜 “또는 ” 악 일부 믿고 당신을 이끌 것으로”코드입니다. 읽기 쉽고 효율적입니다.
답변
그것에 대해 생각하는 간단한 방법은 더 평범한 영어를 사용하는 것입니다
If Bool1 And Bool2 Then
If [both are true] Then
If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then
답변
AndAlso는 And와 비슷하지만 C #, C ++ 등에서 &&처럼 작동합니다.
차이점은 첫 번째 절 (AndAlso 앞의 절)이 true 인 경우 두 번째 절은 평가되지 않으며 복합 논리식이 “단락”된다는 것입니다.
이것은 때때로 다음과 같은 표현식에서 매우 유용합니다.
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
myObj가 null 인 경우 위의 식에서 old And를 사용하면 NullReferenceException이 발생합니다.