Сравнение свойств объекта в c #

ОБНОВЛЕНИЕ: последняя версия Compare-Net-Objects c#-language находится на GitHub, имеет NuGet package и Tutorial. Это object можно назвать как

//This is the comparison class
CompareLogic compareLogic = new CompareLogic();

ComparisonResult result = compareLogic.Compare(person1, person2);

//These will be different, write out the differences
if (!result.AreEqual)
    Console.WriteLine(result.DifferencesString);

Или, если properties вам нужно изменить конфигурацию, используйте

CompareLogic basicComparison = new CompareLogic() 
{ Config = new ComparisonConfig()
   { MaxDifferences = propertyCount 
     //add other configurations
   }
};

Полный objects список настраиваемых параметров objects находится в ComparisonConfig.cs

Исходный ответ:

Ограничения, которые c# я вижу в вашем коде:

  • Самая property большая проблема в том, что csharp при этом не проводится глубокое c# сравнение объектов.

  • Он не c-sharp выполняет сравнение элементов c-sharp по элементам, если свойства property являются списками или содержат c# списки в виде элементов (это properties может быть n уровней).

  • При c#.net этом не учитывается, что c#.net некоторые типы свойств не properties должны сравниваться (например, свойство properties Func, используемое для целей c-sharp фильтрации, как в классе c-sharp PagedCollectionView).

  • Он не property отслеживает, какие свойства c# на самом деле были разными c-sharp (чтобы вы могли показать objects их в своих утверждениях).

Сегодня c#-language я искал какое-то решение objects для модульного тестирования, чтобы property провести глубокое сравнение objects свойств, и в итоге я использовал: http://comparenetobjects.codeplex.com.

Это objects бесплатная библиотека с одним .cs-file классом, который вы можете c# просто использовать следующим object образом:

var compareObjects = new CompareObjects()
{
    CompareChildren = true, //this turns deep compare one, otherwise it's shallow
    CompareFields = false,
    CompareReadOnly = true,
    ComparePrivateFields = false,
    ComparePrivateProperties = false,
    CompareProperties = true,
    MaxDifferences = 1,
    ElementsToIgnore = new List() { "Filter" }
};

Assert.IsTrue(
    compareObjects.Compare(objectA, objectB), 
    compareObjects.DifferencesString
);

Кроме того, его можно c-sharp легко перекомпилировать для c# Silverlight. Просто скопируйте objects один класс в проект Silverlight c#-language и удалите одну или две строки c-sharp кода для сравнений, которые csharp недоступны в Silverlight, например, сравнение .cs-file частных членов.

c#

object

properties

comparison

2022-08-17T17:26:08+00:00