2010-04-01 8 views
5

मैं कोड के एक टुकड़े के लिए एक यूनिट टेस्ट लिखने की कोशिश कर रहा हूं जो बड़ी मात्रा में टेक्स्ट उत्पन्न करता है। मैंने एक ऐसे मुद्दे में भाग लिया है जहां "अपेक्षित" और "वास्तविक" तार बराबर दिखाई देते हैं, लेकिन Assert.AreEqual फेंकता है, और समानता ऑपरेटर और Equals() दोनों झूठी वापसी करते हैं। GetHashCode() का परिणाम दोनों मानों के लिए भी अलग है।सी # स्ट्रिंग समानता ऑपरेटर झूठी वापसी करता है, लेकिन मुझे पूरा यकीन है कि यह सच होना चाहिए ... क्या?

हालांकि, टेक्स्ट स्ट्रिंग्स में दोनों तारों को डालने और डिफमेर्ज से तुलना करने से मुझे पता चलता है कि वे वही हैं।

इसके अतिरिक्त, Encoding.ASCII.GetBytes() दोनों मानों पर और फिर SequenceEquals का उपयोग करके परिणामी बाइट सरणी की तुलना करने के लिए सही हो जाता है।

मूल्य 34 केबी प्रत्येक हैं, इसलिए मैं उन्हें अभी यहां रख कर रखूंगा। कोई विचार? मैं पूरी तरह से स्टंप हूँ।

+2

'एन्कोडिंग। यूनिकोड.गेटबाइट्स()' - एक ही व्यवहार का प्रयास करें? –

+0

string.Equals (yourstring, StringComparison.InvariantCulture) क्या करता है? –

+0

क्या आप केवल यूनिट टेस्ट पोस्ट कर सकते हैं? –

उत्तर

5

आप फ़ाइलों को एन्कोडिंग प्रकार क्या हैं जो आप डिफमेर्ज में खिला रहे हैं? यदि आपके पास ऐसे अक्षर हैं जो एन्कोडिंग प्रकार से मेल नहीं खाते हैं, तो एक मौका है कि वे डिफमेज में दिखाई नहीं देंगे।

उत्पन्न होने वाली स्ट्रिंग और अपेक्षित परिणाम में अलग-अलग वर्ण एन्कोडिंग हो सकते हैं। जब आप ASCII.GetBytes कर रहे हैं, तो आप सबकुछ ASCII में परिवर्तित कर रहे हैं। इसलिए, आपके तारों को ASCII में परिवर्तित किया जा रहा है और ASCII चरित्र सेट के संदर्भ में बराबर हैं। हालांकि, वे अभी भी अन्य चरित्र सेटों में असमान हो सकते हैं (और फिर भी आप को "देखो")।

इसके अलावा, string.Compare(str1, str2, StringComparison.XXXX) करने का प्रयास करें और हमें बताएं कि क्या होता है।

+0

शायद 'स्ट्रिंग कॉम्पर्सन.ऑर्डिनल' का प्रयास करना सबसे अच्छा है। –

+0

हाँ, यह एक एन्कोडिंग समस्या थी ... गलत पाठ को एक वेब पेज से कॉपी किया गया था और कुछ पागल उद्धरण वर्ण थे –

10

charchar द्वारा लूप और यह पता लगाएं कि यह क्या अलग है? तथ्य यह है कि इसे डिस्क पर लिखना और ASCII/पाठ की तुलना करना मुझे बताता है कि यह शायद कैरिज-रिटर्न/लाइन-फीड संबंधित है (जिसे किसी भी तरह से सहेजने के दौरान सामान्यीकृत किया जाता है), या कुछ गैर-ASCII चरित्र से संबंधित है (शायद एक उच्च- यूनिकोड व्हाइटस्पेस), जिसे ASCII के रूप में सहेजते समय हटा दिया जाएगा।

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