हम एक स्थापित सॉफ्टवेयर विकसित करते हैं जो एक को छोड़कर सभी ज्ञात कंप्यूटरों पर ठीक काम करता है। समस्या "8" से शुरू होने वाली तारों को पार्स करना है। ऐसा लगता है कि एक स्ट्रिंग की शुरुआत में "8" एक आरक्षित चरित्र है।int। "8" का पार्स विफल रहता है। Int.Parse हमेशा CultureInfo.InvariantCulture की आवश्यकता है?
Parsing:
int.Parse("8") -> Exception message: Input string was not in a correct format.
int.Parse("80") -> 0
int.Parse("88") -> 8
int.Parse("8100") -> 100
CurrentCulture: sv-SE
CurrentUICulture: en-US
समस्या int.Parse ("8", CultureInfo.InvariantCulture) का उपयोग कर हल किया जाता है। हालांकि, समस्या के स्रोत को जानना अच्छा लगेगा।
प्रश्न: अगर हम इनवेंचर संस्कृति निर्दिष्ट नहीं करते हैं तो हमें "8" का यह व्यवहार क्यों मिलता है?
अतिरिक्त जानकारी:
मैं अपने ग्राहक के लिए एक छोटा सा कार्यक्रम भेजने किया ऊपर परिणाम प्राप्त:
private int ParseInt(string s)
{
int parsedInt = -1000;
try
{
parsedInt = int.Parse(s);
textBoxMessage.Text = "Success: " + parsedInt;
}
catch (Exception ex)
{
textBoxMessage.Text =
string.Format("Error parsing string: '{0}'", s) + Environment.NewLine +
"Exception message: " + ex.Message;
}
textBoxMessage.Text += Environment.NewLine + Environment.NewLine +
"CurrentCulture: " + Thread.CurrentThread.CurrentCulture.Name + "\r\n" +
"CurrentUICulture: " + Thread.CurrentThread.CurrentUICulture.Name + "\r\n";
return parsedInt;
}
अद्यतन
मैं भर में ठोकर खाई इस लिंक, माइक्रोसॉफ्ट कनेक्ट डेटाबेस में एक बग:
ऐसा लगता है समान लक्षणों के साथ एक मुद्दा है, लेकिन कोई वास्तविक मूल कारण वहाँ की तरह। अगर कोई इस पर विस्तार कर सकता है तो मैं आभारी रहूंगा!
साइड नोट के लिए धन्यवाद, मैंने इसका ख्याल रखा :) मैंने अपनी लोकेल सेटिंग्स के लिए रजिस्ट्री में मूल्यों की पहले जांच की है और केवल 8 बाहर मुद्रा नकारात्मक पैटर्न है जो त्रुटि को पुन: उत्पन्न करने में मेरी सहायता नहीं करता है मेरी मशीन पर आप निश्चित रूप से जियोओ के सही रास्ते पर हैं। हालांकि, यह मुद्दा एक कठिन है और मुझे यकीन नहीं है कि माइक्रोसॉफ्ट इस मुद्दे के कारण को भी जानता है। आप निश्चित रूप से एक बड़ा यूपी प्राप्त कर रहे हैं, लेकिन व्यवहार अभी भी एक रहस्य है। यही कारण है कि मैं स्वीकार नहीं कर रहा हूं कि आप समाधान के रूप में जवाब दे रहे हैं भले ही मैं आपके प्रयास के लिए आभारी हूं! –
इस उत्तर की शुरुआत मेरे लिए गलत लगता है। 'NumberFormatInfo.CurrencyNegativePattern' और' NumberFormatInfo.CurrencyPositivePattern' में मान केवल कुंजी के रूप में उपयोग किए जाते हैं - ऋणात्मक चिह्न (-), मुद्रा चिह्न, और संख्या स्वयं को प्रारूपण/पार्सिंग के लिए उपयोग करने के क्रम की पहचान करने के लिए। उदाहरण के लिए, '8' 'मुद्रा परिवर्तक पैटर्न' के मूल्य के रूप में इसका अर्थ है कि पैटर्न '-n $' होना चाहिए। –