对象获取的差异我想用仿制药,以提高自己,但实际上我不知道如何甚至开始这项任务:从仿制药
我需要建立一个将记录两个表日志的方法。这种方法将会收到两个相同类型的对象,然后我需要对它们进行比较。
第一个表格会记录下对象的名称。
第二个表将收到以下数据:第一个表记录ID,字段名称,旧值和新值。
我需要这是泛型建立,因为我有很多不同的对象,我相信那将是痛苦的,怪异的建立任何形式的开关盒的,我要记录这些信息的每个对象。
我希望你们帮助我!
对象获取的差异我想用仿制药,以提高自己,但实际上我不知道如何甚至开始这项任务:从仿制药
我需要建立一个将记录两个表日志的方法。这种方法将会收到两个相同类型的对象,然后我需要对它们进行比较。
第一个表格会记录下对象的名称。
第二个表将收到以下数据:第一个表记录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
}
}
}
}
你必须拥有的属性oldValue和NEWVALUE列设置为数据库中的varchar或nvarchar和保存之前将所有属性值的字符串,否则你不能做你的要求。从技术上讲,你甚至不需要在这里使用泛型,因为这两个参数都可以简单地取一个对象,而反射仍然可以工作,因为两个对象都是相同的类型。这里的泛型参数只是让它更干净一点,并确保调用此方法的人不能无意中传入两个不同类型的对象。
编辑:您的第一个表中获取该对象的名字,你会怎么做:
typeof(TObjectType).ToString();
除非他真的要验证objectA.GetType()== objectB.GetType()和使用对象A .GetType()。GetProperties(),这样你就可以检查所有运行时数据上的数据,而不仅仅是编译时。因为如果在编译时将对象转换为(System.Object),它将不会检查任何相关的属性。 – 2012-01-27 21:08:55
好点先生。 – SventoryMang 2012-01-27 21:40:23
感谢您的回应!我试试这个! – 2012-02-02 12:19:57