Nous avons deux classes qui ont exactement les mêmes accesseurs publics (et beaucoup d'entre eux), mais proviennent de différentes zones de la hiérarchie des objets; nous avons besoin de copier et comparer entre ces deux objets. Nous pourrions écrire manuellement un constructeur de copie et un opérateur de comparaison qui compare les valeurs des accesseurs du même nom, mais il semble qu'il y ait une meilleure façon de le faire en utilisant la réflexion et LINQ.Propre façon de comparer/copier entre des classes similaires
Exemple: nous avons la classe ClassA qui a 70 accesseurs; nous avons aussi la classe ClassB qui a 70 accesseurs, qui sont définis comme étant le même nom et le même type que les accesseurs de ClassA.
public class ClassA
{
int OneInt {get; set;}
int TwoInt {get; set;}
...
string OneString {get; set;}
string AnotherString {get; set;}
}
public class ClassB
{
int OneInt {get; set;}
int TwoInt {get; set;}
...
string OneString {get; set}
string AnotherString {get; set;}
}
Ce que je voudrais est un moyen simple d'utiliser la réflexion pour découvrir tous les accesseurs publics de ClassA, et utiliser ces noms pour définir les valeurs de l'accesseur respective sur ClassB à la valeur de l'accesseur sur Classe A. En gros, dans psuedocode:
foreach (string accName in ClassA.Accessors[])
BInstance.Accessors[accName].Value = AInstance.Accessors[accName].Value;
Et, bien sûr, la même chose pourrait être utilisé pour l'égalité des tests entre les deux classes. Ma connaissance de la réflexion C# et de LINQ n'est pas assez bonne pour savoir comment faire cela, mais je jurerais que c'est quelque chose de relativement simple.
J'aime celui-là; c'est très clair. Je savais que j'étais dans le bon niveau avec le code! :) –
Utilisé avec des modifications mineures; fonctionne bien! –