2

在查看 和 之间的区别时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 && ...

他们以他们的方式编码,而不是我预期的方式,有什么原因吗?如果有的话,这里有什么区别?

4

1 回答 1

3

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

C# 编译器实际上转换&&为 IL 级别的分支,因为 CIL 没有短路的概念and。您的反编译器没有接受它并笨拙地回译了 IL。

于 2012-11-12T15:11:59.943 回答