1

Assert.Equal()の匿名オブジェクトはfalseを返していますが、デバッガーで手動でプロパティを注意深く調べると、すべて問題ないようです。

言うまでもなく、次のプロパティについて文句を言うことはありません(差分ツールで比較すると、まったく同じです)。

想定: { id = 1, name = , children = System.Collections.Generic.List 1[System.Collections.Generic.Dictionary2[System.String,System.String]] } (<>f__AnonymousType1 3[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.List1[[System.Collections.Generic.Dictionary`2[[システム.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0 、Culture=neutral、PublicKeyToken=b77a5c561934e089]]、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089]])


実際: { id = 1, name = , children = System.Collections.Generic.List 1[System.Collections.Generic.Dictionary2[System.String,System.String]] } (<>f__AnonymousType1 3[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.List1[[System.Collections.Generic.Dictionary`2[[システム.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0 、Culture=neutral、PublicKeyToken=b77a5c561934e089]]、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089]])

4

1 に答える 1

0

読んだあと:

アセンブリ内での匿名型の統合、パート 1

アセンブリ内での匿名型の統合、パート 2

私が言えることから; アセンブリ内で匿名オブジェクトが同じプロパティを同じ順序で持っている場合、それらは同じ型として比較できます。ただし、別々のアセンブリでは、同じ型として比較することはできません。

多くの試行錯誤の後、私は代わりにCompareObjects オープン ソース プロジェクトを使用して、同等性チェックをより詳細に制御できるようにしました。Assert に固執したいので理想的ではありませんが、コンテキスト内でオブジェクトを操作する必要があるため、これは私の問題に対する非常にエレガントなソリューションです。

 CompareObjects compareObjects = new CompareObjects();
 compareObjects.MaxDifferences = 1000;
 compareObjects.IgnoreObjectTypes = true; //handles anonymous types
 bool isSame = compareObjects.Compare(exepected, actual);
 Assert.True(isSame, compareObjects.DifferencesString);
于 2014-02-28T14:37:25.860 に答える