我有以下课程:
public class CompareField<T>
{
public CompareField()
{
Status = FieldStatus.NoChange;
}
public CompareField(T value)
{
Value = value;
Status = FieldStatus.NoChange;
}
public T Value { get; set; }
public FieldStatus Status { get; set; }
public bool Equals(T objectValue)
{
if (!Equals(Value, default(T)) || !Equals(objectValue, default(T))) return false;
return Value.Equals(objectValue);
}
}
public enum FieldStatus
{
NoChange = 0,
HasChanges = 1
}
所以我的模型将包含一堆属性,它们都使用CompareField类型(比如CompareField&lt;'string&gt; FirstName {get; set;} ...
现在我想比较两个模型,并根据字段相同或不同的事实设置每个字段的FieldStatus。
我尝试过使用this post中的解决方案,但它只涉及比较部分...我实际上无法使用该方法设置任何属性。
另外,如果T比简单类型更复杂,我该怎么办?假设T是一个类列表,那么我应该使用什么呢?
我不确定如何实现这一点(只使用反射可能太慢了)......
任何提示都会有所帮助:)
修改 所以一个例子就是
MODELA
名字:鲍勃
姓氏:测试
ModelB
名字:鲍比
姓氏:测试
所以我想要比较ModelA和ModelB的“东西”并获得以下结果
MODELA
名字:Bob - HasChanges
姓氏:测试 - NoChanges
所以手头就像是
if (!modelA.FirstName.Value.Equals(modelB.FirstName.Value))
modelA.FirstName.Status = FieldStatus.HasChanges