2010-07-13 28 views
8

Tôi có hai đối tượng từ cùng một lớp và tôi cần phải so sánh chúng với trường theo trường. Vấn đề là họ có gần hàng trăm lĩnh vực và nó sẽ được helluva làm việc để viết rằng bằng tay.So sánh hai đối tượng từ cùng một lớp với tấn trường

Bạn có biết cách nào để làm điều đó một cách dễ dàng hơn không? Phản ánh trong Java có thể là một giải pháp, nhưng có vẻ như tôi giống như một hack. Và tôi tìm kiếm một giải pháp C#.

+2

.NET cũng có sự phản ánh =) –

+2

Thứ gì đó như: http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- in-c/986617 # 986617 trong đó sử dụng sự phản chiếu, nhưng biên dịch nó cho hiệu suất tối đa? –

+1

Một câu hỏi liên quan khác, được đề xuất bởi Flakron Bytyqi: http://stackoverflow.com/questions/506096/comparing-object-properties-in-c –

Trả lời

4

Hai ý tưởng:

  1. Sử dụng phản xạ (nó có sẵn trong C#) thời gian chạy và lặp trên các lĩnh vực của Clas so sánh chúng. Nếu bạn muốn có thể loại trừ các trường nhất định, bạn có thể làm điều đó bằng cách tạo một lớp thuộc tính và đánh dấu các trường bạn không muốn so sánh với thuộc tính đó.

  2. Sử dụng phản chiếu để lặp qua các trường theo cùng một cách và tạo mã so sánh được yêu cầu. Bằng cách này, bạn sẽ có mã "thực" nhưng không phải tự viết và tự bảo trì. Các thuộc tính có thể được sử dụng để tinh chỉnh mã so sánh được tạo.

1

Tốt nhất là refactor mã của bạn, hàng trăm trường là cách để nháp.

Nếu bạn không thể vì mã di sản tìm ra thuộc tính nào làm cho chúng bằng.

+1

Không có hai ý kiến ​​về mã này cần tái cấu trúc, chỉ cần không có bây giờ hãy làm cho nó sạch hơn ngay bây giờ. Và, than ôi, tất cả các thuộc tính phải bằng nhau. – vlood

0

Nếu may mắn, bạn sẽ xác định một hoặc hai thuộc tính duy nhất cho cá thể - đặc biệt là nếu lớp của bạn đại diện cho thực thể cơ sở dữ liệu - và bạn sẽ chỉ phải so sánh các thuộc tính duy nhất đó.

0

Sử dụng Cụm từ thông dụng tìm và thay thế. Đó là một nỗi đau khi bạn phải thêm các trường * (những cái đã loại bỏ giúp bạn có một lỗi biên dịch), nhưng bạn có được lợi ích của việc biên dịch mã.

Thực sự, tuy nhiên, hãy cân nhắc chia lớp học. Nếu có 100 trường, chúng có thể được nhóm trong các lớp thành phần không? 100 thành viên là rất nhiều lộn xộn phải quản lý.

Các vấn đề liên quan