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

逆コンパイルされたコードは元のコードと同じではないため、違いが見られる場合があります。

&&CIL には short-circuit の概念がないため、C# コンパイラは実際には IL レベルでの分岐に変換しandます。あなたの逆コンパイラはそれを拾わず、ILをぎこちなく逆翻訳しました。

于 2012-11-12T15:11:59.943 に答える