Comment comparer les propriétés entre deux objets

J'ai deux classes : Person , PersonDto

public class Person 
{
    public string Name { get; set; }
    public long Serial { get; set; }
    public DateTime Date1 { get; set; }
    public DateTime? Date2 { get; set; }
}

&

public class PersonDto
{
    public string Name { get; set; }
    public long Serial { get; set; }
    public DateTime Date1 { get; set; }
    public DateTime? Date2 { get; set; }
}

J'ai deux objets à la fois par l'égalité des valeurs.

    var person = new Person { Name = null , Serial = 123, Date1 = DateTime.Now.Date, Date2 = DateTime.Now.Date };
    var dto = new PersonDto { Name = "AAA", Serial = 123, Date1 = DateTime.Now.Date, Date2 = DateTime.Now.Date };

J'ai besoin de vérifier la valeur de toutes les propriétés de deux classes par la réflexion. Mon objectif final est défini différence de valeur de ces propriétés.

    IList diffProperties = new ArrayList();
    foreach (var item in person.GetType().GetProperties())
    {
        if (item.GetValue(person, null) != dto.GetType().GetProperty(item.Name).GetValue(dto, null))
            diffProperties.Add(item);
    }

Je l'ai fait, mais le résultat n'est pas satisfaisant. Le comte de diffProperties pour le résultat a été 4mais nombre de mes attendons était 1.

Bien sûr, toutes les propriétés peuvent contenir de valeurs null.

J'ai besoin d'une solution générique.
Ce qui doit le faire?

  • Salut cher Ehsan, je crois que vous êtes sur une mauvaise piste, ayant deux classes avec exactement la même mise en œuvre est totalement fausse idée, vous avez juste besoin d'une classe et de plusieurs (2) les objets de il. Vous êtes à la vérification de, disons, d'une série à une autre série de contrôle de leur lieu de stockage dans la RAM pas leur VALEUR réelle, considèrent que la vérification des valeurs est un contenu différent en programmation orientée objet.
InformationsquelleAutor Ehsan | 2012-08-22