對象獲取的差異我想用仿製藥,以提高自己,但實際上我不知道如何甚至開始這項任務:從仿製藥
我需要建立一個將記錄兩個表日誌的方法。這種方法將會收到兩個相同類型的對象,然後我需要對它們進行比較。
第一個表格會記錄下對象的名稱。
第二個表將收到以下數據:第一個表記錄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