我使用ILSply从遗留的VB.NET应用程序中解构了一些旧代码,并出现了这一行:
Operators.ConditionalCompareObjectEqual(safeDataReader["isLoader"], -1, false)
我知道这是编译器生成的,但不建议在应用程序源代码中使用此代码。我的问题是为什么会出现这种情况,应该在正常的情况下采取什么措施?码?
答案 0 :(得分:4)
documentation for the method在那里说:
表示重载的Visual Basic equals(=)运算符。
为什么呢?我不“知道”,但很容易做出有根据的猜测。
VB.NET中“=”运算符的语义与C#和标准Object.Equals()的语义略有不同。语义是从VB6继承的,由于向后兼容性原因无法更改。显然,这个方法实现了编译器的VB6语义。
如果能够对这些差异进行系统分析,那将是一个有趣的读物。
进一步的想法:
“不推荐”的原因是因为没有理由从VB.NET调用该方法:只需使用=
。在C#中,没有特别的理由调用VB6语义,所以这个方法在那里也没有多大意义。
显然,如果你正在编译从VB.NET生成的C#代码,那么这些是特殊情况:调用方法是正确的做法,除非你愿意花时间分析代码并向自己证明标准=
cn可以安全替换。