2009-09-01 17 views
10

क्या .NET स्ट्रिंग फ़ंक्शंस IndexOf("blah") केस संवेदनशील हैं?.NET स्ट्रिंग ऑपरेशंस केस संवेदनशील हैं?

मुझे जो याद है, वे मुझे नहीं हैं, लेकिन किसी कारण से मैं अपने ऐप में बग देख रहा हूं जहां क्वेरी स्ट्रिंग में टेक्स्ट ऊंट मामले (जैसे उपयोगकर्ता आईडी) में है और मैं IndexOf("userid") के लिए परीक्षण कर रहा हूं।

उत्तर

21

हां, स्ट्रिंग फ़ंक्शन डिफ़ॉल्ट रूप से केस संवेदनशील होते हैं। उनके पास आमतौर पर एक अधिभार होता है जो आपको अपनी इच्छित स्ट्रिंग तुलना को इंगित करने देता है। यह इंडेक्सऑफ के लिए भी सच है। अपने स्ट्रिंग के सूचकांक, एक केस-संवेदी रास्ते में पाने के लिए, आप कर सकते हैं:

string blaBlah = "blaBlah"; 
int idx = blaBlah.IndexOf("blah", StringComparison.OrdinalIgnoreCase); 
+1

सी # stricly केस संवेदी है, लेकिन VB.NET में, आप गैर केस संवेदनशील तुलना को बल देने के लिए विकल्प तुलना टेक्स्ट का उपयोग कर सकते हैं। वीबी.नेट में डिफ़ॉल्ट बिनरी है इसलिए यह सी # की तरह व्यवहार करता है। –

+1

फिर भी, 'विकल्प तुलना' केवल वीबी तुलना ऑपरेटर जैसे '=' और 'Like' पर लागू होता है - यह 'स्ट्रिंग' के किसी भी तरीके को प्रभावित नहीं करेगा, न ही कोई अन्य एफसीएल स्ट्रिंग फ़ंक्शंस। –

1

नेट स्ट्रिंग तुलना वास्तव में केस संवेदी होते हैं। आप तुलना करने से पहले चीजों को सामान्य करने के लिए ToUpper() जैसी चीजों का उपयोग कर सकते हैं।

+0

एक और विकल्प होगा: CultureInfo.CurrentCulture.CompareInfo.IndexOf (स्रोत, मूल्य, तुलनाऑप्शन। इग्नोरकेज़) –

+0

संस्कृतियों के बारे में सावधान रहें, या आपको अचानक तुर्की की प्रणाली पर काम नहीं करने की तुलना मिल सकती है - तुर्की में, मैं İ के लिए अपरकेस करता हूं। –

+3

या तो ToUpper या ToLower का उपयोग करना एक बुरा विचार है क्योंकि इसे किसी नए ऑब्जेक्ट (प्रदर्शन के लिए खराब) के प्रारंभिकरण की आवश्यकता होगी, सभी स्ट्रिंग तुलना विधियों को या तो एक ओवरलोड में से एक में स्ट्रिंग कॉम्परिसन तर्क या आईसीओएमपेयर तर्क लेता है, उनमें से एक का उपयोग करने के लिए ToUpper /नीचा करना –

0

डिफ़ॉल्ट रूप से वे केस संवेदनशील होते हैं लेकिन उनमें से अधिकतर (यदि सभी नहीं) इंडेक्सऑफ समेत एक अधिभार है जो स्ट्रिंग कॉम्पर्सन तर्क लेता है। जैसे यदि आप StringComparison तर्क के रूप में

StringComparison.InvariantCultureIgnoreCase 

पारित indexOf के लिए यह कर दी जाएगी (नाम का तात्पर्य) मामले मतभेद की अनदेखी

11

एक बात मैं मौजूदा उत्तर देने के लिए जोड़ना चाहते हैं (जब से तुम थे मूल रूप एएसपी.नेट के बारे में पूछना):

कुछ नाम/मूल्य संग्रह, जैसे Request.QueryString और शायद अनुरोध भी। फॉर्म केस-संवेदी नहीं हैं। उदाहरण के लिए अगर मैं निम्न URL

http://server/mypage.aspx?user=admin 

का उपयोग कर एक ASPX पेज पर जाएं, फिर निम्नलिखित लाइनों के दोनों "व्यवस्थापक" वापस आ जाएगी:

var user1 = Request.QueryString["user"]; 
var user2 = Request.QueryString["USER"]; 
संबंधित मुद्दे