2010-07-13 6 views
8

मुझे एक ही कक्षा से दो वस्तुएं मिलीं और मुझे फ़ील्ड द्वारा फ़ील्ड की तुलना करने की आवश्यकता है। समस्या यह है कि उनके पास करीब सौ फ़ील्ड हैं और हाथ से लिखने के लिए हेल्लूवा काम होगा।एक ही कक्षा से दो वस्तुओं की तुलना करें फ़ील्ड के साथ

क्या आपको यह आसान तरीका करने का कोई तरीका पता है? जावा में प्रतिबिंब एक समाधान हो सकता है, लेकिन फिर भी यह मुझे एक हैक की तरह लगता है। और मैं सब के बाद एक सी # समाधान की तलाश है।

+2

.NET भी प्रतिबिंब है =) –

+2

कुछ ऐसा है: http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- इन-सी/986617 # 9 86617 जो प्रतिबिंब का उपयोग करता है, लेकिन अधिकतम प्रदर्शन के लिए इसे संकलित करता है? –

+1

Flakron Bytyqi द्वारा सुझाए गए एक और संबंधित प्रश्न: http://stackoverflow.com/questions/506096/comparing-object-properties-in-c –

उत्तर

4

दो विचारों:

  1. उपयोग प्रतिबिंब (यह सी # में उपलब्ध है) क्रम और clas उनकी तुलना के क्षेत्र से अधिक पाश। यदि आप कुछ फ़ील्ड को बाहर करने में सक्षम होना चाहते हैं तो आप एक विशेषता वर्ग बनाकर ऐसा कर सकते हैं और उन फ़ील्ड को चिह्नित कर सकते हैं जिन्हें आप उस विशेषता से तुलना नहीं करना चाहते हैं।

  2. उसी तरह से फ़ील्ड पर लूप के प्रतिबिंब का उपयोग करें और आवश्यक तुलना कोड उत्पन्न करें। इस तरह आपके पास "असली" कोड होगा लेकिन इसे स्वयं लिखना और बनाए रखना नहीं होगा। उत्पन्न किए गए तुलना कोड को ठीक-ठीक करने के लिए गुणों का उपयोग किया जा सकता है।

1

आपके कोड को दोबारा करने के लिए सबसे अच्छा है, सौ फ़ील्ड मश करने का तरीका है।

यदि आप ऐसा नहीं कर सकते क्योंकि विरासत कोड यह पता लगाता है कि कौन सी विशेषता उन्हें बराबर बनाती है।

+1

इस कोड को दोबारा प्रतिक्रिया देने की आवश्यकता नहीं है, बस इस पास नहीं है अभी इसे क्लीनर बनाने के लिए अभी समय। और, हां, सभी विशेषताओं को बराबर होना चाहिए। – vlood

0

यदि आप भाग्यशाली हैं, तो आप उदाहरण के लिए अद्वितीय एक या दो गुणों की पहचान करेंगे - विशेष रूप से यदि आप कक्षा डेटाबेस डेटाबेस का प्रतिनिधित्व करते हैं - और आपको केवल उन अद्वितीय गुणों की तुलना करना होगा।

0

नियमित अभिव्यक्ति का उपयोग करें और प्रतिस्थापित करें। यह दर्द होता है जब आपको फ़ील्ड * जोड़ना पड़ता है (हटाए गए लोगों को आपको संकलन त्रुटि मिलती है), लेकिन आपको संकलित कोड होने का लाभ मिलता है।

वास्तव में, कक्षा को विभाजित करने पर विचार करें। यदि 100 फ़ील्ड हैं, तो क्या उन्हें घटक वर्गों में समूहीकृत किया जा सकता है? प्रबंधन के लिए 100 सदस्यों को बहुत गड़बड़ है।

संबंधित मुद्दे