我有一个函数,其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
或者我有一种更简单的方法吗?
答案 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