Lassen Sie uns mit einer Klassendefinition zum Wohle Beispiel beginnen:Union von zwei auf Gleichheit ihrer Mitglieder Basierend Objekte
public class Person
{
public string FirstName;
public string LastName;
public int Age;
public int Grade;
}
Nun nehmen wir an, ich habe eine List<Person>
genannt people
3 Objekte enthält:
{"Robby", "Goki", 12, 8}
{"Bobby", "Goki", 10, 8}
{"Sobby", "Goki", 10, 8}
Was ich suche ist eine Möglichkeit, die folgenden Einzel Person
Objekt abzurufen:
{null, "Goki", -1, 8}
wobei Felder, die in allen Objekten gleich sind, ihren Wert beibehalten, während Felder mit mehreren Werten durch einige ungültige Werte ersetzt werden.
Mein erster Gedanke bestand aus:
Person unionMan = new Person();
if (people.Select(p => p.FirstName).Distinct().Count() == 1)
unionMan.FirstName = people[0].FirstName;
if (people.Select(p => p.LastName).Distinct().Count() == 1)
unionMan.LastName = people[0].LastName;
if (people.Select(p => p.Age).Distinct().Count() == 1)
unionMan.Age = people[0].Age;
if (people.Select(p => p.Grade).Distinct().Count() == 1)
unionMan.Grade = people[0].Grade;
Leider ist das reale Business-Objekt hat viele mehr Mitglieder als vier und dies ist sowohl mühsam zu schreiben und überwältigend für jemand anderen zum ersten Mal zu sehen.
ich auch irgendwie die Nutzung der Reflexion zu setzen diese sich wiederholende Prüfungen und Aufgaben in einer Schleife betrachtet:
string[] members = new string[] { "FirstName", "LastName", "Age", "Grade" };
foreach (string member in members)
{
if (people.Select(p => p.**member**).Distinct().Count() == 1)
unionMan.**member** = people[0].**member**;
}
wo ** Mitglied ** wäre jedoch Reflexion erlauben würde, das Abrufen und Speichern von diesem bestimmten Mitglied (vorausgesetzt, es ist möglich).
Während die erste Lösung funktionieren würde, und die zweite, die ich annehme, würde funktionieren, hat jemand eine bessere alternative Lösung für dieses Problem? Wenn nicht, wäre die Verwendung der oben beschriebenen Reflexion möglich?
Well sollte die Idee deiner Sekunde funktionieren, aber wirklich nicht mit dem Code gezeigt! Übrigens sollten Sie einen Standardkonstruktor für Person mit Ihren "ungültigen" Werten haben. –