2010-07-13 64 views
8

我從同一個類中獲得兩個對象,我需要逐字段比較它們。問題在於他們有近百個字段,而且手工編寫這些信息是非常重要的。比較來自同一類的兩個對象與字段的大小

你知道有什麼辦法可以這麼簡單嗎? Java中的思考可能是一種解決方案,但在我看來,它似乎是一種破解。畢竟,我尋求一種C#解決方案。

+2

.NET也有反射=) – 2010-07-13 08:03:54

+2

類似於:http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- in-c/986617#986617它使用反射,但將其編譯爲最大性能? – 2010-07-13 08:04:28

+1

另一個相關的問題,由Flakron Bytyqi建議:http://stackoverflow.com/questions/506096/comparing-object-properties-in-c – 2010-07-13 08:07:34

回答

4

兩個想法:

  1. 使用反射(這是在C#提供)運行時和循環遍歷比較它們的CLAS領域。如果您希望能夠排除某些字段,您可以通過創建屬性類並標記不希望與該屬性進行比較的字段來完成此操作。

  2. 使用反射以相同方式遍歷字段並生成所需的比較代碼。這樣你就可以擁有「真實」的代碼,但不必自己編寫和維護它。屬性可用於微調生成的比較代碼。

1

最好的是重構你的代碼,百場是糊塗的方式。

如果你不能,因爲是遺留代碼找出哪些屬性使他們平等。

+1

關於此代碼需要重構沒有兩個意見,只是沒有現在就讓時間變得更加清潔吧。 而且,唉,所有的屬性必須相同。 – vlood 2010-07-13 08:09:59

0

如果幸運的話,您將識別出一個或兩個屬性,這些屬性對於實例是唯一的 - 特別是如果您的類表示數據庫實體時 - 您只需比較這些獨特的屬性。

0

使用正則表達式查找和替換。當你必須添加字段*(刪除的會導致編譯錯誤),這是一種痛苦,但是你得到編譯代碼的好處。

不過,真的,考慮分裂班級。如果有100個字段,它們可以分組到組件類中嗎? 100名成員需要管理很多麻煩。

相關問題