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

时间:2013-02-25 17:01:47

标签: vb.net nothing

我有一个函数,其selectID参数类型为“object”。

如果我的参数是基础类型的默认值:即整数默认值为零,我想要进行一些操作。

如果没有“Strict On”,我可以使用:

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

或者我有一种更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

我最终实施了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

答案 1 :(得分:-1)

您也可以使用可为空的类型。

Dim selectedID As Integer? = nothing

...

if selectedID isnot nothing then

    dim value as integer = selectedID.value
    ...

end if

您可以检查可空类型的另一种方法是为其分配值。

if selectedID.hasValue = true then

   dim value as integer = selectedID.value
   ...

end if