VB.NET语言和没有:为什么它是这样的?

Syl*_*gue 7 .net vb.net compiler-construction

这是一个关于VB.NET语言的问题.由于我每天都在使用它,所以我只是试着理解它的一些结构背后的动机.

我只是发现这一行:

If myObject Is Nothing then
Run Code Online (Sandbox Code Playgroud)

这个是正确的:

If Nothing Is myObject Then
Run Code Online (Sandbox Code Playgroud)

结果相同.使用ildasm,我们可以看到这些行被转换为:

if myObject = null then
Run Code Online (Sandbox Code Playgroud)

if null = myObject then
Run Code Online (Sandbox Code Playgroud)

好吧,但是,在VB.NET中,你不能写:

if myObject = Nothing Then
Run Code Online (Sandbox Code Playgroud)

编译器不会接受.

嗯,对我来说,如果没有,myObjectIfObject = Nothing更不明显.

为什么VB.NET作者只是反思?任何提示?

Jar*_*Par 25

您遇到的问题是VB.Net区分了两种类型的对象比较.即参考和价值比较.

VB.Net中的"Is"运算符用于参考比较.当有问题的值既是引用类型也可以是nullables时,可以使用此方法.尝试比较值类型,这种方式将导致编译错误.

"="运算符用于值比较.值比较只能用于在类定义中定义explicit =,<>运算符对的类型.平等的实际实现取决于运营商的实施.

C#采用不同的方法,因为它使用==进行值和参考比较.使用哪个因素取决于几个因素,包括被比较的值的类型和某些相等方法的实现.

  • 我在这里等着倒计时你来写一个答案.:)如果你迟到了10秒我就要提交我的. (4认同)