空值检查在VB中
我所要做的就是检查一个对象是否为null,但不pipe我做什么,如果它编译,它会抛出一个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书籍,search了几个论坛,所有应该工作的不是! 对不起,问这样一个补救的问题,但我只需要知道。
只是你知道,debugging器说空对象是comp.Container
改变你的And
一个标准将会testing两个expression式。 如果comp.Container是Nothing,那么第二个expression式将引发一个NullReferenceException,因为您正在访问一个空对象的属性。
AndAlso
还会短路逻辑评估。 如果comp.Container为Nothing,则不会评估第二个expression式。
你的代码比没有必要的方式更混乱。
使用(Not (X Is Nothing))
replace(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
。
但是(正如在评论中指出的那样),基于索引的循环无论如何都是stream行的。 除非你绝对必须,否则不要使用它们。 而不是使用:
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