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)
编译器不会接受.
嗯,对我来说,如果没有,myObject比IfObject = Nothing更不明显.
为什么VB.NET作者只是反思?任何提示?
Jar*_*Par 25
您遇到的问题是VB.Net区分了两种类型的对象比较.即参考和价值比较.
VB.Net中的"Is"运算符用于参考比较.当有问题的值既是引用类型也可以是nullables时,可以使用此方法.尝试比较值类型,这种方式将导致编译错误.
"="运算符用于值比较.值比较只能用于在类定义中定义explicit =,<>运算符对的类型.平等的实际实现取决于运营商的实施.
C#采用不同的方法,因为它使用==进行值和参考比较.使用哪个因素取决于几个因素,包括被比较的值的类型和某些相等方法的实现.