比较两个属性并根据结果设置属性

时间:2014-07-15 06:50:11

标签: c# linq reflection

我有以下课程:

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

0 个答案:

没有答案