为了举例,让我们从一个类定义开始:
public class Person
{
public string FirstName;
public string LastName;
public int Age;
public int Grade;
}
现在让我们假设我有一个包含 3 个对象的List<Person>
调用:people
{"Robby", "Goki", 12, 8}
{"Bobby", "Goki", 10, 8}
{"Sobby", "Goki", 10, 8}
我正在寻找的是某种检索以下单个Person
对象的方法:
{null, "Goki", -1, 8}
其中所有对象中相同的字段保留其值,而具有多个值的字段被替换为一些无效值。
我的第一个想法包括:
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;
不幸的是,真正的业务对象的成员多于四个,这既繁琐,又让其他人第一次看到时不知所措。
我还考虑过以某种方式利用反射将这些重复的检查和分配放在一个循环中:
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**;
}
其中** member **将是但是反射将允许检索和存储该特定成员(假设它是可能的)。
虽然第一个解决方案可行,而我假设第二个解决方案可行,但有没有人有更好的替代解决方案来解决这个问题?如果不是,那么使用上述反射是否可行?