UFO ET IT

VB의 Null 검사

ufoet 2020. 11. 24. 20:39
반응형

VB의 Null 검사


내가하고 싶은 것은 객체가 null인지 확인하는 것입니다.하지만 내가 무엇을하든 컴파일 NullReferenceException하면 확인하려고 시도합니다! 내가 한 일은 다음과 같습니다.

    If ((Not (comp.Container Is Nothing)) And (Not (comp.Container.Components Is Nothing))) Then
        For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
            fixUIIn(comp.Container.Components.Item(i), style)
        Next
    End If

    If ((Not IsDBNull(comp.Container)) And (Not IsDBNull(comp.Container.Components))) Then
        For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
            fixUIIn(comp.Container.Components.Item(i), style)
        Next
    End If

    If ((Not IsNothing(comp.Container)) And (Not IsNothing(comp.Container.Components))) Then
        For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
            fixUIIn(comp.Container.Components.Item(i), style)
        Next
    End If

    If ((Not (comp.Container Is DBNull.Value)) And (Not (comp.Container.Components Is DBNull.Value))) Then
        For i As Integer = 0 To comp.Container.Components.Count() Step 1
            fixUIIn(comp.Container.Components.Item(i), style)
        Next
    End If

VB 책을 살펴보고 여러 포럼을 검색했지만 작동해야하는 모든 것이 작동하지 않습니다! 수정 질문을 해주셔서 죄송 합니다만 알고 싶습니다.

아시다시피 디버거는 null 객체가 comp.Container


Ands를 AndAlsos로 변경

표준 And은 두 표현을 모두 테스트합니다. comp.Container가 Nothing이면 null 개체의 속성에 액세스하기 때문에 두 번째 식에서 NullReferenceException이 발생합니다.

AndAlso논리적 평가를 단락시킵니다. comp.Container가 Nothing이면 두 번째 표현식이 평가되지 않습니다.


귀하의 코드는 필요 이상으로 복잡합니다.

교체 (Not (X Is Nothing))X IsNot Nothing외부 괄호를하고 생략 :

If comp.Container IsNot Nothing AndAlso comp.Container.Components IsNot Nothing Then
    For i As Integer = 0 To comp.Container.Components.Count() - 1
        fixUIIn(comp.Container.Components(i), style)
    Next
End If

훨씬 더 읽기 쉽습니다. … 또한 중복 Step 1및 아마도 중복을 제거했습니다 .Item.

그러나 (주석에서 지적했듯이) 인덱스 기반 루프는 어쨌든 유행하지 않습니다. 꼭 필요한 경우가 아니면 사용하지 마십시오. 사용 For Each하는 대신 :

If comp.Container IsNot Nothing AndAlso comp.Container.Components IsNot Nothing Then
    For Each component In comp.Container.Components
        fixUIIn(component, style)
    Next
End If

참고 URL : https://stackoverflow.com/questions/5583112/null-check-in-vb

반응형