13

私は2つのケースを検討しました:

var a = new { a = 5 };
var b = new { a = 6 };
Console.WriteLine(a.GetType() == b.GetType()); // True

イデオネ: http://ideone.com/F8QwHY

と:

var a = new { a = 5, b = 7 };
var b = new { b = 7, a = 6 };
Console.WriteLine(a.GetType() == b.GetType()); // False

イデオネ: http://ideone.com/hDTcxX

問題は、なぜフィールドの順序が実際に重要なのかということです。

これには何らかの理由がありますか、それとも単にそうであるからです(これが設計です)。

理由が、匿名型がこのように使用されることを想定されておらず、あなたが に訴えるべきではないということだけである場合GetType、なぜコンパイラは最初のケースで単一のクラスを再利用し、匿名型宣言ごとに新しいクラスを生成するだけではないのですか? ?

4

3 に答える 3

4

GetType()理由は次のとおりです。型は匿名であるため、信頼できる結果を返すことに依存する のはひどい考えです。

順序が一致する場合にコンパイラが型を再利用する理由については、単に時間とスペースを節約するためだと思います。順序を考慮すると、生成されたクラスをコンパイル中にキャッシュし、必要に応じて再利用する方がはるかに簡単です。

于 2013-05-31T14:27:43.283 に答える