문제

에 VB.NET 의 차이점은 무엇입니까 사 AndAndAlso?어떤 서비스를 사용해야 합니까?

도움이 되었습니까?

해결책

그만큼 And 연산자는 양쪽을 평가합니다 AndAlso 왼쪽이 참인 경우에만 오른쪽을 평가합니다.

An example:

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# World에서 온다면 사용해야합니다. 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,다음 계속해 있는 경우 true 입니다.

if x = 5 AndAlso y = 7

면 체크 x5 입니다.그렇지 않은 경우에,그것은 확인되지 않는 경우에는 7 기 때문에,그것이 알고있는 조건이 거짓이다.(이라는 단락.)

일반적으로 사람들이 사용하여 단락시키는 방법이 있는 경우는 이유를 명시적으로 확인하지 않 두 번째 부분은 경우 첫 번째 부분은 진실하지 않는 경우와 같이 그것을 던져 있는 경우에는 예외가 확인됩니다.예를 들어:

If Not Object Is Nothing AndAlso Object.Load()

는 경우에는 사용 AndAndAlso,그것은 여전히도 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

메모: 비 제로 정수가 고려됩니다 true; Dim e = not 0 설정됩니다 e 에게 -1 시연 Not 또한 약간의 연산자입니다.

|| 그리고 && (C# 버전 OrElse 그리고 AndAlso) 마지막 평가 된 표현을 반환하십시오 3 그리고 5 각기. 이를 통해 관용구를 사용할 수 있습니다 v || 5 C#에서 제공 5 표현의 가치로 v ~이다 null 또는 (0 그리고 정수)와 가치 v 그렇지 않으면. Semantics의 차이는 VB.net에서 vb.net에서 vb.net에서 vb.net에서 멍청한 C# 프로그래머를 잡을 수 있습니다.

따라서 질문에 대답합니다: 사용 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이 참인 경우에만 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는 C#, C ++ 등에서 &&와 같이 작동하는 것을 제외하고는 매우 비슷합니다.

차이점은 첫 번째 조항 (안달 소 이전의 조항)이 사실이라면, 두 번째 조항은 절대로 평가되지 않는다는 것입니다. 복합 논리 표현은 "단락"이라는 것입니다.

이것은 때때로 매우 유용합니다.

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

MyOBJ가 무인하면 기존과 위의 표현식에서 NullReferenceException이 발생합니다.

스택 오버플로 질문도 참조하십시오. 항상 Andalso와 Orelse 연산자를 사용해야합니까?.

또한 : 사용을 언급 한 사람들에 대한 의견 And 표현식의 오른쪽에 부작용이있는 경우 :

오른쪽에 필요한 부작용이 있으면 "및"를 사용하지 않고 왼쪽으로 이동하십시오. 당신은 정말로 필요합니다 "와"if 둘 다 측면에는 부작용이 있습니다. 그리고 당신이 많은 부작용이 있다면 아마도 다른 잘못을하고있을 것입니다. 일반적으로, 당신은 실제로 안달 소를 선호해야합니다.

위의 답변 외에도 Andalso는 단락으로 알려진 컨디셔닝 프로세스를 제공합니다. 많은 프로그래밍 언어는 VB.NET과 마찬가지로이 기능을 구축하고 있으며, 불필요한 평가를 잘라서 장기 조건 문서에서 상당한 성능을 높일 수 있습니다.

또 다른 유사한 조건은 왼쪽 조건이 False 인 경우 오른쪽 조건 만 확인하는 ORELSE 조건으로, 실제 조건이 발견 된 후에는 불필요한 조건 검사를 차단합니다.

나는 항상 단거리 회로 프로세스를 사용하고 조건부 진술을 이것에 의해 가장 큰 혜택을 누릴 수있는 방식으로 구조화하는 것이 좋습니다. 예를 들어, 가장 효율적이고 가장 빠른 조건을 먼저 테스트하여 다른 시간에 절대적으로 단락시킬 때만 긴 조건을 실행할 수 있도록 테스트하십시오.

우리의 대다수의 Orelse와 Andalso는 몇 가지 혼란스러운 예외를 제외하고는 트릭을 수행 할 것입니다 (우리가 사용해야 할 곳이 1% 미만).

부울 논리를 과시하고 로켓 과학처럼 보이게하는 사람들에 의해 쫓겨나 지 마십시오.

그것은 매우 간단하고 간단하며 때로는 시스템이 처음부터 논리를 좋아하지 않기 때문에 예상대로 작동하지 않을 수 있습니다. 그럼에도 불구하고 당신의 뇌는 그의 논리가 100% 테스트되고 입증되었으며 효과가 있다고 계속 말합니다. 바로 그 순간 당신의 두뇌를 신뢰하지 말고 그에게 다시 생각하거나 (Orelse 또는 Orelse가 아님) 많은 논리가 필요하지 않은 다른 직업을 찾도록 강요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top