programing

케이스 OR-ing을 사용하는 VB.NET select case 문 논리는 무엇입니까?

projobs 2021. 1. 17. 10:24
반응형

케이스 OR-ing을 사용하는 VB.NET select case 문 논리는 무엇입니까?


내 케이스 표현식에서 Or 문을 사용하고 있습니다.

이 범위 내의 값이 있지만 일치하는 값을 찾지 못했습니다. 왜 안돼?

예제 코드 :

Select Case 2
    Case 0
        ' Some logic

    Case 1
        ' Some other logic

    Case 2 Or 3
        Console.WriteLine("hit")

 End Select

위의 내용을 사용하면 hit인쇄 될 것이라고 가정 하지만 그렇지 않습니다.


쉼표 연산자를 사용하여 case 문을 구분합니다.

Select Case 2
    Case 0,1,2,3
        Console.WriteLine("hit")
 End Select

으로 자레드는 말했다, 당신이를 단락 case 문에 쉼표 연산자를 사용합니다.

Or당신이 뭘하고 있었는 비트이다 OR, 그것은 "3"인 결과. 재미있게도 "2 AND 3"은 아마도 특정 경우에 효과가 있었을 것입니다.


JaredPar가 맞지만 To 구문을 사용할 수도 있습니다.

Select Case 2
    Case 0,1
    Case 2 To 3
        Console.WriteLine("Hit")
End Select

이것은 0 또는 1이됩니다. 아무것도하지 않음, 2 또는 3 print Hit ... To 구성은 범위입니다 ...

다음은 MSDN입니다.


편집 : VB.NET이 Case ORing을 허용하지 않는다고 가정하는 것이 잘못된 것 같습니다 . 나는 C #과 IL에서 생각하고 있었고 내가 틀린 것처럼 보입니다.

그러나 누군가 지적했듯이 코드가 작동하지 않는 이유는 Case 2 또는 3이 2 또는 3을 비트 단위로 평가하거나 따라서 Case 3으로 평가했기 때문입니다.

설명을 위해 :


       2 binary = 0000 0010
       3 binary = 0000 0011
  2 Or 3 binary = 0000 0011 (= 3)

  Select Case 2
     Case 0            '--> no match

     Case 1            '--> no match

     Case 2 Or 3       '(equivalent to Case 3  --> no match)
   End Select

그러나 성능을 위해 이러한 구성을 사용해서는 안된다는 점을 지적해야한다고 생각합니다. 컴파일러가 Select 문 (C #에서 전환)을 만나면 조회 테이블과 스위치 MSIL 명령어를 사용하여 컴파일을 시도 하지만 Case 1,2,11,55 와 같은 경우 컴파일러는 변환 할 수 없습니다. 이를 조회 테이블에 추가하고 일련의 비교를 사용해야합니다 (If .. Else를 사용하는 것과 유사).

요점은 Select 문을 실제로 활용하려면이를 염두에두고 케이스를 설계해야한다는 것입니다. 그렇지 않으면 유일한 이점은 코드 가독성입니다.

잘 설계된 스위치는 O (1) 연산 인 반면 잘못 설계된 스위치 (일련의 If..Then..Else 문과 동일)는 O (n) 연산입니다.


이것은 0의 경우 "something", 1의 경우 "something", 2 또는 3의 경우 "hit"또는 그렇지 않은 경우 "hit else"를 수행 할 수 있습니다.

Select Case 2
    Case 0
        Console.WriteLine("something")
    Case 1
        Console.WriteLine("something else")
    Case Is 2 To 3
        Console.WriteLine("hit")
    Else
        Console.WriteLine("hit else")
 End Select

참조 URL : https://stackoverflow.com/questions/555197/what-is-the-vb-net-select-case-statement-logic-with-case-or-ing

반응형