0

我已经使用 ILSply 从旧版 VB.NET 应用程序中反编译了一些旧代码,并且出现了这一行:

Operators.ConditionalCompareObjectEqual(safeDataReader["isLoader"], -1, false)

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

4

1 回答 1

4

方法的文档在那里说:

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

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

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

对差异进行系统分析会很有趣。

进一步的想法:

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

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

于 2013-04-24T13:01:17.247 回答