<>而不是在VB.NET中

Kez*_*zer 22 vb.net operators query-string

我正在寻找关于VB.NET <>Not运算符的令人兴奋的任务. Not- 我假设通过我的小用途 - 它的功能相当于!C#等语言,<>相当于!=.

在VB.NET中,一个常见的问题是对没有引用的对象执行布尔表达式,它出现了.所以如果我们这样做

If Request.QueryString("MyQueryString") <> Nothing Then
Run Code Online (Sandbox Code Playgroud)

如果查询字符串不存在,这实际上会失败.为什么,我不知道.老程序员完成的方式如下:

If Not Request.QueryString("MyQueryString") Is Nothing Then
Run Code Online (Sandbox Code Playgroud)

这往往有效.对我来说,它们在功能上是等效的,尽管操作员倾向于根据某些因素进行不同的比较,例如运算符优先级,为什么它在这种情况下不起作用,但我不知道,也没有找到任何相关材料.

我问这个,因为我必须编写标准文档,我们正在确定使用Not或者<>.关于它应该是哪种方式的想法,或者你应该这样做?

Cha*_*lie 31

我一直使用以下内容:

If Request.QueryString("MyQueryString") IsNot Nothing Then
Run Code Online (Sandbox Code Playgroud)

但仅仅因为语法上它读得更好.

在测试有效的QueryString条目时,我还使用以下内容:

If Not String.IsNullOrEmpty(Request.QueryString("MyQueryString")) Then
Run Code Online (Sandbox Code Playgroud)

这些只是我一直使用的方法,所以除了在回读代码时对我最有意义,我无法证明它们的用法.


Row*_*haw 10

Is是不一样的=- Is比较参考,同时=比较值.

如果您正在使用.Net Framework(或更高版本)的v2,那么IsNot运营商将做正确的事情,并自然地阅读.


Cer*_*rus 9

我认为你的问题归结为"(Is=)与(IsNot和<>)之间的区别".

两种情况的答案都是一样的:

=并且<>为值类型隐式定义,您可以为类型显式定义它们.

Is并且IsNot设计用于比较引用类型以检查两个引用是否引用相同的对象.

在您的示例中,您将字符串对象与Nothing(Null)进行比较,并且由于为字符串定义了=/ <>运算符,因此第一个示例有效.但是,当遇到Null时它不起作用,因为字符串是引用类型并且可以是Null.更好的方法(正如您猜测的那样)是使用Is/ 的后一版本IsNot.