首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VB.NET反编译的Operators.ConditionalCompareObjectEqual

从VB.NET反编译的Operators.ConditionalCompareObjectEqual
EN

Stack Overflow用户
提问于 2013-04-24 20:48:59
回答 1查看 1.3K关注 0票数 0

我使用ILSply从一个遗留的VB.NET应用程序中反编译了一些旧代码,出现了下面这行代码:

代码语言:javascript
复制
Operators.ConditionalCompareObjectEqual(safeDataReader["isLoader"], -1, false)

我知道这是编译器生成的,但不建议在应用程序源代码中使用此代码。我的问题是,为什么会出现这种情况,在“正常”代码中应该是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 21:01:17

documentation for the method就是这么说的:

表示重载的Visual Basic等于(=)运算符。

为什么?我不“知道”,但很容易做出一个有根据的猜测。

VB.NET中"=“运算符的语义与C#和标准Object.Equals()略有不同。语义继承自VB6,出于向后兼容性的原因不能更改。显然,这个方法实现了编译器的VB6语义。

如果能对这些差异进行系统的分析,那将会是一个有趣的读物。

进一步的思考:

之所以“不推荐”,是因为没有理由从VB.NET中调用该方法:只需使用=。在C#中,调用VB6语义没有特别的理由,因此该方法在那里也没有多大意义。

显然,如果您正在编译从VB.NET生成的C#代码,那么这些都是特殊情况:除非您愿意花时间分析代码并证明可以安全地替换标准=,否则调用该方法是正确的。

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

https://stackoverflow.com/questions/16192466

复制
相关文章

相似问题

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