2016-01-11 8 views
7

मैं सोच रहा था कि क्यों ReSharper मुझे चेतावनी देता है, जब मैं एक विशिष्ट संस्कृति जानकारी दिए बिना एक चार को स्ट्रिंग में बदलने की कोशिश कर रहा हूं।ReSharper Char.ToString() पर चेतावनी क्यों देता है जब CultureInfo स्पष्ट रूप से निर्दिष्ट नहीं करता है?

क्या कोई मामला है, जहां इसे दो प्रणालियों पर अलग-अलग रूपांतरित किया जा सकता है?

उदाहरण:

var str = ' '.ToString(); 

निम्नलिखित ReSharper चेतावनी डिफ़ॉल्ट रूप से पॉप अप होगा:

स्पष्ट स्ट्रिंग रूपांतरण में एक संस्कृति का उल्लेख करें।

+0

बिल्कुल चेतावनी क्या है? कृपया अपनी समस्या के आधार पर एक [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve) बनाएं। –

+0

कोड वास्तव में क्या है? –

+0

यह एक अच्छा सवाल है कि मैं खुद से कई बार पूछ रहा हूं। लेकिन आपको उदाहरण कोड और सटीक संदेश –

उत्तर

10

इसका कारण यह है ReSharper देखता है कि प्रकार IConvertible लागू करता है जिसमें ToString(IFormatProvider) है।

System.Char अपने आप में है कि हस्ताक्षर के साथ एक सार्वजनिक विधि का खुलासा नहीं करता है, भले ही documentation इंगित करता है यह करता है:

Char.ToString overloads

आप IFormatProvider पैरामीटर के साथ अधिभार को देखें, तो आप इस नोटिस देखेंगे:

इम्प्लीमेन्ट्स
IConvertible.ToString(IFormatProvider)

और इस टिप्पणी:

प्रदाता पैरामीटर नजरअंदाज कर दिया है; यह इस ऑपरेशन में भाग नहीं लेता है।

ReSharper सिर्फ इतना है कि विधि की उपस्थिति, और एक IFormatProvider बिना ToString करने के लिए कॉल देखती है और इस तरह की शिकायत है, इस मामले आप सुरक्षित रूप से यह उपेक्षा कर सकते हैं में।

+0

मुझे यह जवाब पसंद है, लेकिन यह मेरे (दूसरे) प्रश्न का अभी तक जवाब नहीं देता है: क्या इसे अनदेखा करने वाले विभिन्न प्रणालियों के बीच कोई दुष्प्रभाव हैं। मैं आपको दी गई सारी जानकारी के तहत प्रत्यक्ष निष्कर्ष लेना चाहता हूं। :) – Jannik

+2

नहीं, "आप इसे सुरक्षित रूप से अवहेलना कर सकते हैं"। एक ही चरित्र को एक वर्ण के साथ एक स्ट्रिंग में परिवर्तित किया जाएगा, यहां कोई रूपांतरण नहीं हो रहा है। –

+0

[संदर्भ स्रोत] (http://referencesource.microsoft.com/#mscorlib/system/char.cs,9f693c2a17b40531) यह भी सच होने के लिए दिखाता है। –

-2

मैं स्ट्रिंग और चरित्र से निपटने में कुछ विषमताएं के लिए यूनिकोड नेतृत्व की विषमताएं में से कुछ इस http://csharpindepth.com/Articles/General/Strings.aspx

पाया। स्ट्रिंग विधियों में से कई संस्कृति-संवेदनशील हैं - दूसरे शब्दों में, वे क्या करते हैं वर्तमान धागे की संस्कृति पर निर्भर करता है। उदाहरण के लिए, आप "i" .toUpper() को वापस आने की क्या अपेक्षा करेंगे? ज्यादातर लोग कह सकते हैं कि 'मैं' है, लेकिन तुर्की में सही जवाब "मैं" है (यूनिकोड U + 0130, "ऊपर डॉट के साथ लैटिन राजधानी मैं")

+2

यह बात नहीं है। इस मामले में 'ToUpper' या 'ToLower' विधियां नहीं हैं। –

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