IsNothing versus Is Nothing
这里是否有人使用VB.NET并强烈赞成或反对使用 编辑:如果您认为它们都同样可以接受,您是否认为最好选择一个并坚持使用,还是可以将它们混合在一起? 如果在执行MSIL的过程中对其进行观察,您会发现它并没有编译成完全相同的代码。当您使用IsNothing()时,它实际上是对该方法进行调用,而不是仅仅对表达式求值。 我倾向于使用"什么都不是"的原因是,当我否定它时,它变成了"我不是什么"而不是我个人觉得更易读的"不是不是(对象)"。 我发现Patrick Steele在他的博客上回答了这个问题最好:避免IsNothing() 为了确保帕特里克·斯蒂尔(Patrick Steele)的职位受到赞誉,我没有在此处复制他的任何答案。但是我确实认为,如果您要尝试决定使用"无"还是"无",则应该阅读他的文章。我认为您会同意"无为"是最佳选择。 编辑-VoteCoffe的评论在这里 部分文章内容:查看更多代码后,我发现另一个应避免的原因:它接受值类型!显然,由于IsNothing()是一个接受"对象"的函数,因此您可以将任何想要的东西传递给它。如果是值类型,.NET会将其装箱成一个对象,然后将其传递给IsNothing,该值始终对装箱的值返回false! VB.NET编译器将检查" Is Nothing"样式的语法,如果尝试对值类型执行" Is Nothing",则不会编译。但是IsNothing()函数的编译没有任何抱怨。 -PSteele –投票咖啡 您应该绝对避免使用 这是文章IsNothing()VS Nothing的4个原因
最重要的是,
这样可以编译运行,但是:
将不会编译,而是编译器将引发错误:
它的速度慢-实际上慢了33.76%(超过1000000000次迭代)!
也许是个人喜好,但
即它做x吗? ---不是
所以我认为 我同意"什么都不是"。如上所述,很容易否定"不算什么"。 我觉得这更容易阅读...
比这个...
我倾向于"一无所有"替代方案,主要是因为它看起来更面向对象。 当然,Visual Basic没有Ai n't关键字。
VB充满了这样的事情,试图使它既"像英语"又让习惯于经常使用()和{}的语言的人感到满意。 我更喜欢IsNothing()...但是我使用C和C#,所以这很舒服。而且我认为它更具可读性。但是,无论您觉得哪种感觉都更舒适。 我也倾向于像在SQL中一样,部分地使用Is Nothing版本。 我最初使用IsNothing,但是我一直在较新的项目中使用Is Nothing,主要是为了提高可读性。我唯一坚持使用IsNothing的方法是,如果我要维护始终使用的代码,并且希望保持一致。 Is Nothing要求将一个对象分配给值Nothing。 IsNothing()可以接受任何尚未初始化的变量,包括数字类型。例如,在测试是否已传递可选参数时,这很有用。 |