级联等级检查Ands:System.Guid

时间:2012-11-12 14:54:23

标签: c#

在查看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 && ...

他们是否有理由按照他们的方式编码,而不是我预期的方式?这有什么不同之处呢?

1 个答案:

答案 0 :(得分:3)

反编译代码与原始代码不同,因此您可能会看到不同之处。

C#编译器实际上将&&转换为IL级别的分支,因为CIL没有短路and的概念。你的反编译器没有选择那个,并且笨拙地反向翻译了IL。