我有一个函数,它有一个“selectedID”类型的对象参数。
如果我的参数是基础类型的默认值:即Integer默认值是零,我希望发生一些操作。
如果没有"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或者有没有我遗漏的更简单的方法?
发布于 2013-02-26 20:28:40
我最终实现了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发布于 2013-02-26 21:21:05
为此,您还可以使用可空类型。
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 ifhttps://stackoverflow.com/questions/15072273
复制相似问题