在严格模式 VB.NET 中替换"If object = Nothing Then"



我有一个函数,它有一个类型为"object"的selectedID参数。

如果我的参数是底层类型的默认值:即Integer默认值为零,我希望执行一些操作。

没有"严格开启",我可以使用:

If selectedID = Nothing Then
    'Do Something
End If

我必须做这样的事情吗:

If (TypeOf selectedID Is Integer AndAlso selectedID.Equals(0)) _
OrElse (TypeOf selectedID Is String AndAlso selectedID.Equals(Nothing)) _
OrElse .. other types go here .. Then
    'Do something
End If

或者我缺少一个更简单的方法吗?

我最终实现了Neolisk的建议,该建议的优点是简短、包罗万象且非常可重复使用:

Public Function IsDefaultObject(obj As Object) As Boolean
    Return obj.Equals(GetDefaultValue(obj.GetType()))
End Function
Public Function GetDefaultValue(t As Type) As Object
    If (t.IsValueType) Then Return Activator.CreateInstance(t)
    Return Nothing
End Function

我最初采用的解决方案是创建一个函数IsDefaultObject(obj(,该函数告诉我对象是否分配了默认值。随着越来越多的类型被注意到,我计划添加到它中。

Private Function IsDefaultObject(obj As Object) As Boolean
    If obj Is Nothing Then Return True
    If String.IsNullOrEmpty(obj.ToString()) Then Return True
    If obj.Equals(0) Then Return True
    If obj.Equals(New Date()) Then Return True
    Return False
End Function

当然,我本可以使用Hans Passant评论中的解决方案:

Private Function IsDefaultObject(obj As Object) As Boolean
    Return Microsoft.VisualBasic.CompilerServices.Operators.
        ConditionalCompareObjectEqual(obj, Nothing, False)
End Function

您也可以为此使用可为null的类型。

Dim selectedID As Integer? = nothing
...
if selectedID isnot nothing then
    dim value as integer = selectedID.value
    ...
end if

另一种方法可以检查是否为可为null的类型分配了值。

if selectedID.hasValue = true then
   dim value as integer = selectedID.value
   ...
end if

最新更新