Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个属性并根据结果设置属性_C#_Linq_Reflection - Fatal编程技术网

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

C# 比较两个属性并根据结果设置属性,c#,linq,reflection,C#,Linq,Reflection,我有以下课程: public class CompareField<T> { public CompareField() { Status = FieldStatus.NoChange; } public CompareField(T value) { Value = value; Status = FieldStatus.NoChange; } public T Value

我有以下课程:

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
}

您要设置什么属性?如果没有泛型和反射,您将如何手工编写代码,以便我们了解您的意思?另外:
EqualityComparer.Default.Equals(…)
将是比
Equals(x,y)
更好的选择,特别是如果
T
可以是值类型(
int
等)。比较列表要复杂得多,因为您会遇到如下问题:相同的逻辑值以不同的顺序排列;删除第2项和第3项;如何匹配1==1,2==4,3==5,等等-坦率地说,这对于比较list@Grundy来说真的很难做到,谢谢,这会派上用场的@马歇尔一世又加了一句example@Team-JoKi您可以为自定义类实现接口,并简单调用
Equals
if (!modelA.FirstName.Value.Equals(modelB.FirstName.Value)) 
    modelA.FirstName.Status = FieldStatus.HasChanges