2012-05-12 4 views
1

이 두 블록을 시도했지만 동일한 값을 반환합니다. 나는 단순히 코드를 보여, 자세한 내용을 설명하지 않습니다VB.NET 이상한 IF 문 동작, 항상 else

Dim f As Nullable(Of Integer) 
    If f = 1 Then 
     Console.WriteLine("Equal") 
    Else 
     Console.WriteLine("Not Equal") 
    End If 

그것은 나를 메시지를 표시

난 그냥를 NOT 추가 "같지 않음을"나는 대답하지 얻을 excpect,하지만 난 같은있어 위와 같이!!!

Dim f As Nullable(Of Integer) 
    If Not f = 1 Then 
     Console.WriteLine("Equal") 
    Else 
     Console.WriteLine("Not Equal") 
    End If 

올바르게 C#으로 작동 ...

+0

사소한 점 :'f = 1 '은'(Not f) = 1'이 아니라'Not (f = 1)'이긴하지만 여전히 둘 다'Nothing'입니다. –

+0

VB.Net이 너무 더러운 것을 발견했습니다. 왜 사람들은 아직도 그것을 사용하고 있습니까? C#, 파이썬, 루아, 루비는 어때? – pylover

+0

일부 사람들은 C#의 냉기를 결코 마시지 않았기 때문에 "아직 사용하고 있습니다"라고 말하지만 VB/VB.NET 쿨러를 마 셨습니다! VB/VB.NET에서 경력을 쌓았습니다. VB.NET으로 다시 변환 할만큼 충분한 C#을 배웠지 만 가능하면 사용하지 않는 것이 좋습니다. –

답변

6

TL; DR : 그것은 C 번호 지정 동일한 동작 아니다 VB 위해 지정된 동작에 따라 정확하게 작동한다.

비교 "f = 1"은 VB에서 Nullable(Of Boolean)을 산출합니다. Nothing과 Nothing을 비교 한 결과 Nothing 또는 Nothing도 "True"가 아니므로 항상 Else 절로 끝납니다.

자세한 내용은 MSDN page for nullable value types in VB을 참조하십시오. 특히, "Nullable Types 비교하기"를 찾으면 당신의 상황과 매우 흡사 한 (설명과 함께) 예제를 찾을 수 있습니다. 특히 :

부울 변수 또는 표현식의 값이 Nothing이면 true 또는 false가 아닙니다.
+0

부울 식은 (True 또는 False 또는 Nothing)으로 평가 될 수 있습니다. 부울 식의 세 가지 상태는 무엇입니까? VB의 IF 키워드에는 두 가지 상태가 있습니다. Then Then Else? – pylover

+1

@pylover : 실제로 'Nullable (Of Boolean)'에 대해 세 가지 상태가 있습니다. 불행히도 MSDN은이 점에 분명하지 않습니다. 그러나 예, "If"본문은 값이 True이면 실행되고 값이 False 또는 Nothing이면 "Else"본문이 실행됩니다. –

+0

IronPython 및 F #에서이 상황을 테스트합니다. – pylover