首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IsNothing与Nothing

IsNothing与Nothing
EN

Stack Overflow用户
提问于 2008-08-08 09:45:29
回答 8查看 204.3K关注 0票数 133

这里有没有人使用VB.NET,并且强烈支持或反对使用IsNothing而不是Is Nothing (例如If IsNothing(anObject)If anObject Is Nothing...)?如果有,原因何在?

编辑:如果你认为它们都是同样可以接受的,你认为最好的选择是选择一个并坚持下去,还是可以混合它们?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-08-08 12:28:37

如果您在执行MSIL时查看它,您会发现它并没有编译成完全相同的代码。当您使用IsNothing()时,它实际上会调用该方法,而不仅仅是计算表达式。

我倾向于使用"Is Nothing“的原因是,当我否定它时,它变成了"Not Nothing”而不是"IsNot IsNothing(object)“,我个人觉得后者看起来更具可读性。

票数 128
EN

Stack Overflow用户

发布于 2008-08-11 14:12:57

我发现Patrick Steele在他的博客上回答这个问题最好:Avoiding IsNothing()

我没有在这里复制他的任何答案,以确保Patrick Steele在他的帖子中获得信任。但我确实认为,如果你想决定是使用Is Nothing还是IsNothing,你应该阅读他的帖子。我想你会同意什么都不是是最好的选择。

编辑-VoteCoffe的评论在这里

部分文章内容:在查看了更多代码后,我发现了另一个应该避免的原因:它接受值类型!显然,因为IsNothing()是一个接受'object‘的函数,所以你可以向它传递任何你想要的东西。如果它是一个值类型,.NET将把它打包成一个对象,并将它传递给IsNothing --它总是在装箱的值上返回false!VB.NET编译器将检查"Is Nothing“样式的语法,如果您试图对值类型执行"Is Nothing”操作,则不会进行编译。但是IsNothing()函数在编译时没有任何问题。-PSteele - VoteCoffee

票数 46
EN

Stack Overflow用户

发布于 2014-07-01 00:07:11

您绝对应该避免使用IsNothing()

以下是来自文章的4个原因

  1. 最重要的是,IsNothing(object)将所有内容都作为对象传递给它,甚至是值类型!由于值类型不能为Nothing,因此这是完全浪费的检查。

下面是一个例子:

Dim i As Integer If IsNothing(i) Then‘Do something End If

这将编译并运行得很好,而下面的代码:

Dim I As Integer If I Is Nothing Then‘Do something End If

将不会进行编译,相反,编译器将引发错误:

“‘Is”运算符不接受“Integer”类型的操作数。

操作数必须是引用类型或可为空的类型。

  1. IsNothing(object)实际上是Microsoft.VisualBasic.dll的一部分。

这是不可取的,因为您对VisualBasic库有不必要的依赖。

  1. 的速度很慢-实际上要慢33.76% (超过1000000000 iterations)!

  1. 也许是个人喜好,但IsNothing()读起来像个Yoda Condition。当你查看一个变量时,你是在检查它的状态,并把它作为你调查的对象。

例如,它做x吗?- Is x it a property?

所以我认为If a IsNot NothingIf Not IsNothing(a)读起来更好

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

https://stackoverflow.com/questions/5791

复制
相关文章

相似问题

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