首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在严格模式VB.NET中替换"If object = Nothing Then“

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

Stack Overflow用户
提问于 2013-02-26 01:01:47
回答 2查看 3.9K关注 0票数 1

我有一个函数,它有一个“selectedID”类型的对象参数。

如果我的参数是基础类型的默认值:即Integer默认值是零,我希望发生一些操作。

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

代码语言:javascript
复制
If selectedID = Nothing Then
    'Do Something
End If

我是不是必须做一些类似的事情:

代码语言:javascript
复制
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

或者有没有我遗漏的更简单的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-26 20:28:40

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

代码语言:javascript
复制
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),它告诉我一个对象是否已经分配了默认值。当更多的类型被注意到时,我计划添加它。

代码语言:javascript
复制
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的评论中的解决方案:

代码语言:javascript
复制
Private Function IsDefaultObject(obj As Object) As Boolean
    Return Microsoft.VisualBasic.CompilerServices.Operators.
        ConditionalCompareObjectEqual(obj, Nothing, False)
End Function
票数 0
EN

Stack Overflow用户

发布于 2013-02-26 21:21:05

为此,您还可以使用可空类型。

代码语言:javascript
复制
Dim selectedID As Integer? = nothing

...

if selectedID isnot nothing then

    dim value as integer = selectedID.value
    ...

end if

检查可空类型的另一种方法是为其赋值。

代码语言:javascript
复制
if selectedID.hasValue = true then

   dim value as integer = selectedID.value
   ...

end if
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15072273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档