2015-06-18 89 views
0

我比較了兩個不同類型的屬性名稱不同的對象。所以例如我有foo.Surname,我想比較bar.Lastname。Kellerman比較.NET對象:使用不同屬性名稱比較不同類型的對象

有沒有什麼辦法可以創建一個映射(比如說在ComparisonConfig中),以便我可以告訴比較器這兩個屬性是相同的東西?

我可以將有問題的屬性添加到忽略列表中,然後對該屬性進行手動比較,但似乎更容易創建映射。

+0

我想automapper可能會允許這樣的:http://automapper.org/ – user1666620

+0

這實際上automapper讓我第一想到這一點,地方,它完全符合我想要的語法,但據我所知,您不能使用automapper來比較對象的內容,它只允許您在對象之間複製內容(並檢查映射是否有效) ? – tomRedox

+1

Defo爲自動映射器的作業,創建第三種類型的映射,你有兩種類型的新類型,然後比較這些? – bUKaneer

回答

1

排序,我不確定這是否適用於您要求的內容。如果你的foo和酒吧兩個類共享的密鑰,這會工作:

var spec0 = new Dictionary<Type, IEnumerable<string>>(); 
    spec0.Add(typeof(ChildType), new string[] { "ChildKeyName" }); 
    spec0.Add(typeof(ParentType), new string[] { "ParentKeyName"}); 

    List<Type> spec1 = new List<Type>(); 
    spec1.Add(typeof(ParentType)); 
    spec1.Add(typeof(ChildType)); 

    CompareLogic.Config.IgnoreCollectionOrder = true; 

    CompareLogic.Config.ClassTypesToInclude = spec1; 
    CompareLogic.Config.CollectionMatchingSpec = spec0; 
    basicComparison.Config.MaxDifferences = int.MaxValue; 
    ComparisonResult = basicComparison.Compare(NewObject, OldObject);