देता है यह प्रश्न C#, .NET कॉम्पैक्ट फ्रेमवर्क 2 और विंडोज सीई 5 डिवाइस पर लागू होता है।सी # string.IndexOf() अप्रत्याशित मान
मुझे एक .NET DLL में एक बग का सामना करना पड़ा जो कि कई अलग-अलग सीई उपकरणों पर उपयोग में था, बिना किसी समस्या के। अचानक, एक नए विंडोज सीई 5.0 डिवाइस पर, इस बग निम्नलिखित कोड में प्रकाशित हुई:
string s = "Print revenue receipt"; // has only single space chars
int i = s.IndexOf(" "); // two space chars
मैं मैं -1 होने की उम्मीद है, लेकिन इस से आज, जब indexOf अचानक वापस आ 5.
तक केवल सच थाजब
int i = s.IndexOf(" ", StringComparison.Ordinal);
का उपयोग कर के बाद से इस व्यवहार नहीं होती है, मैं काफी यकीन है कि यह एक संस्कृति आधारित phenomenom है हूँ, लेकिन मैं अंतर इस नई डिवाइस बनाता है पहचान नहीं कर सकते। यह एक ज्ञात डिवाइस का एक समान संस्करण है (बस एक तेज सीपीयू और नया बोर्ड)।
दोनों ही उपकरण:
- रन Windows CE 5.0 समान स्थानीयकरण के साथ
- System.Environment.Version रिपोर्ट '2.0.7045.0'
- CultureInfo.CurrentUICulture और CultureInfo.CurrentCulture रिपोर्ट 'en-GB' ('डी-डीई' के साथ भी परीक्षण किया गया)
- 'सभी' संबंधित रजिस्ट्री कुंजियां बराबर हैं।
नए डिवाइस में सीएफ 3.5 प्रीइंस्टॉल किया गया था, जिनकी जीएसी फाइलों का मैंने प्रयोगात्मक रूप से नाम बदल दिया, वर्णित व्यवहार में कोई बदलाव नहीं हुआ। चूंकि रनटाइम पर हमेशा संस्करण 2.0.7045.0 की सूचना दी जाती है, मुझे लगता है कि इन असेंबली का कोई प्रभाव नहीं पड़ता है।
हालांकि यह ठीक करना मुश्किल नहीं है, जब चीजें जादुई लगती हैं तो मैं इसे खड़ा नहीं कर सकता। कोई संकेत जो मैं याद कर रहा था?
संपादित करें:
एक और::
आप इस _exact_ कोड को चलाते हैं, और आपको 5 मिलते हैं? –
बिल्कुल बिल्कुल नहीं, ऊपर मेरा स्क्रीनशॉट देखें। मैंने सवाल भी सही किया। दिलचस्प अंक: * एस = "राजस्व प्रिंट करें"; // परिणाम -1 * एस = "ड्रुक बेलेग ऑस"; // परिणाम -1 (!) कृपया मेरे लगातार संपादन क्षमा करें, मैं SO के लिए नया हूं। –
http://i.stack.imgur.com/iGxNb.png –