我使用ILSply从一个遗留的VB.NET应用程序中反编译了一些旧代码,出现了下面这行代码:
Operators.ConditionalCompareObjectEqual(safeDataReader["isLoader"], -1, false)我知道这是编译器生成的,但不建议在应用程序源代码中使用此代码。我的问题是,为什么会出现这种情况,在“正常”代码中应该是什么?
发布于 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#代码,那么这些都是特殊情况:除非您愿意花时间分析代码并证明可以安全地替换标准=,否则调用该方法是正确的。
https://stackoverflow.com/questions/16192466
复制相似问题