C# 使用泛型从对象中获取差异

C# 使用泛型从对象中获取差异,c#,c#-4.0,C#,C# 4.0,我试图用泛型来提高自己,但实际上我甚至不知道如何开始这项任务: 我需要构建一个方法,用日志记录两个表。这个方法将接收两个相同类型的对象,然后我需要对它们进行比较 第一个表将记录对象的名称 第二个表将接收以下数据:第一个表记录ID、字段名、旧值和新值 我需要用泛型来构建它,因为我有很多不同的对象,我确信为每个我想要记录这些信息的对象构建任何类型的切换案例都会很痛苦和奇怪 我希望你们能帮助我 除非这些对象共享一个公共接口,否则您必须使用反射来获取对象的属性,然后遍历它们并比较objectA和obje

我试图用泛型来提高自己,但实际上我甚至不知道如何开始这项任务:

我需要构建一个方法,用日志记录两个表。这个方法将接收两个相同类型的对象,然后我需要对它们进行比较

第一个表将记录对象的名称

第二个表将接收以下数据:第一个表记录ID、字段名、旧值和新值

我需要用泛型来构建它,因为我有很多不同的对象,我确信为每个我想要记录这些信息的对象构建任何类型的切换案例都会很痛苦和奇怪


我希望你们能帮助我

除非这些对象共享一个公共接口,否则您必须使用反射来获取对象的属性,然后遍历它们并比较objectA和objectB之间的值。大概是这样的:

public void CompareTwoObjectsAndSaveChanges<TObjectType>(TObjectType objectA, TObjectType objectB )
    {
        //makes sure both objects match in Type
        if(objectA.GetType() == objectB.GetType())
        {
           //uses reflection to get all the properties of that object.
           foreach (var prop in objectA.GetType().GetProperties())
           {
               //checks to see if the value is different
               if(prop.GetValue(objectA, null) != prop.GetValue(objectB, null))
               {
                   //get the property name and its two different values
                   string nameOfPropertyThatChanges = prop.Name;
                   string objectAValue = prop.GetValue(objectA, null).ToString();
                   string objectBValue = prop.GetValue(objectB, null).ToString();

                   //logic to save to database
               }
           }   
        }
    }

但实际上他应该验证objectA.GetType()==objectB.GetType(),并使用objectA.GetType().GetProperties(),这样您就可以检查所有运行时数据上的数据,而不仅仅是编译时数据。因为如果在编译时将对象强制转换为(System.Object),它将根本不会检查任何相关属性。谢谢大家的响应!!我试试这个!
typeof(TObjectType).ToString();