在查看guid.Equals(anotherGuid)
和guid == anotherGuid
之间的区别时,我反编译.NET System.dll并看到类似的内容(缩写和缩写:
if (g._a == this._a) {
if (g._b == this._b) {
...
if (g._k == this._k) { return true; }
} else { return false; }
} else { return false; }
这似乎,嗯,奇怪。我希望代码如下:
if (g._a == this._a && g._b == this._b && ...
他们是否有理由按照他们的方式编码,而不是我预期的方式?这有什么不同之处呢?
答案 0 :(得分:3)
反编译代码与原始代码不同,因此您可能会看到不同之处。
C#编译器实际上将&&
转换为IL级别的分支,因为CIL没有短路and
的概念。你的反编译器没有选择那个,并且笨拙地反向翻译了IL。