【发布时间】:2017-08-06 04:30:06
【问题描述】:
我需要创建一个泛型方法,它将采用两个对象(相同类型),并返回具有不同值的属性列表。 由于我的要求有点不同,我不认为这是重复的。
public class Person
{
public string Name {get;set;}
public string Age {get;set;}
}
Person p1 = new Person{FirstName = "David", Age = 33}
Person p2 = new Person{FirstName = "David", Age = 44}
var changedProperties = GetChangedProperties(p1,p2);
代码说明需求:
public List<string> GetChangedProperties(object A, object B)
{
List<string> changedProperties = new List<string>();
//Compare for changed values in properties
if(A.Age != B.Age)
{
//changedProperties.Add("Age");
}
//Compare other properties
..
..
return changedProperties;
}
应考虑以下事项:
- 通用 - 应该能够比较任何类型的对象(具有相同的类)
- 性能
- 简单
那里有现成可用的库吗?
我可以使用AutoMapper 实现此目的吗?
【问题讨论】:
-
我建议在发生变化时设置
dirty-Flag。它比比较整个对象要快得多(也更容易)。 -
您可以枚举properties of the type,从两个实例中获取值,比较并返回不同的名称。
-
@Psi 不,我不能这样做,因为这些对象被一些我无法控制的 API 方法更改。
-
@Sinatr 我不确定比较大对象时的性能。所以我正在寻找一些替代品。
-
@Rahul 如果您想要一个可以与您无法控制的任何类一起使用的方法,那么您必须使用反射,它会影响性能。另一种方法是编写特定于要比较的类或类的代码。
标签: c# object compare comparison automapper