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é 4
mais 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.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez coller avec comparaison par réflexion, vous ne devez pas utiliser != (référence à l'égalité qui va échouer la plupart des comparaisons pour en boîte des résultats de GetProperty appels) mais au lieu d'utiliser Objet statique.Méthode Equals.
Exemple de comment utiliser la méthode Equals pour comparer deux objets dans votre code de réflexion.
Vous pouvez envisager de Personne classe implémentant l'interface IComparable et la mise en œuvre de CompareTo(Object obj) méthode.
Mettre en œuvre IEquatable interface
Vous regarde classes de toutes les valeurs ne peuvent être null vous avez un nullable de long.
Mais qui dit.
J'ai aussi fait quelque chose comme cela et utilisé ce site internet pour elle. Juste faire en sorte qu'il peut accepter 2 objets différents. Je ne peux pas partager mon code car de licence désolé.