मुझे पता है कि निम्न केस संवेदी है:क्या कोई सी # केस असंवेदनशील बराबर ऑपरेटर है?
if (StringA == StringB) {
तो वहाँ एक ऑपरेटर जो एक असंवेदनशील तरीके से दो तार की तुलना करेंगे है?
मुझे पता है कि निम्न केस संवेदी है:क्या कोई सी # केस असंवेदनशील बराबर ऑपरेटर है?
if (StringA == StringB) {
तो वहाँ एक ऑपरेटर जो एक असंवेदनशील तरीके से दो तार की तुलना करेंगे है?
इस प्रयास करें:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
मैं एक रिश्तेदार स्टैक ओवरफ्लो नौसिखिया हूं - क्या आप एक लिंक जोड़कर क्या मतलब समझ सकते हैं? क्या आप एमएसडीएन दस्तावेज़ों का मतलब है? –
gosh आप जल्दी हो .. lol मैं जवाब लिख रहा था कि आपको पहले मिला है = डी – Erick
आप एक एमएसडीएन लिंक जोड़ सकते हैं (जो मैं आमतौर पर करता हूं) या यदि आपको कोई दिलचस्प ब्लॉग पोस्ट या ऐसा लगता है जो शायद उत्तर का विस्तार कर सकता है। – Samuel
System.Collections.CaseInsensitiveComparer
या
System.StringComparer.OrdinalIgnoreCase
क्या यह पूरे एप्लिकेशन को प्रभावित करता है? – GateKiller
नहीं, केवल तभी जब आप इसका इस्तेमाल करते हैं। – leppie
मुझे इस पर और जानकारी कहां मिल सकती है। क्या इसका मतलब है कि मैं एक केस असंवेदनशील मैच के लिए == का उपयोग कर सकता हूं? – GateKiller
ऑपरेटर? नहीं, लेकिन मुझे लगता है कि आप अपनी संस्कृति बदल सकते हैं ताकि स्ट्रिंग तुलना केस-संवेदी न हो।
// you'll want to change this...
System.Threading.Thread.CurrentThread.CurrentCulture
// and you'll want to custimize this
System.Globalization.CultureInfo.CompareInfo
मुझे विश्वास है कि यह इस तरह से बदल जाएगा कि तारों की तुलना बराबर ऑपरेटर द्वारा की जा रही है।
यह थोड़ा बदसूरत हैक imho है ... –
हाँ, कम से कम कहने के लिए यह बिल्कुल नहीं है कि आप तब तक नहीं करना चाहते हैं जब तक कि आप सभी स्ट्रिंग तुलना को असंवेदनशील नहीं मानते। लेकिन मुझे लगता है कि यह बराबर ऑपरेटर के व्यवहार को बदलता है। –
string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase);
if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) {
लोग रिपोर्ट ToUpperInvariant() तेजी से ToLowerInvariant से() है।
वर्तमान या वांछित संस्कृति के ऊपरी-आवरण के लिए विशेष नियम हैं, तो Invariant एक बुरा विचार हो सकता है। – OregonGhost
और अर्थशास्त्र भी अलग हैं। – leppie
क्या यह प्रत्येक स्ट्रिंग की एक नई प्रति बनाता है? यदि हां, तो बुरा विचार। – cjk
आप
if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase))
या
if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) {
उपयोग कर सकते हैं, लेकिन आप यह सुनिश्चित करें कि StringA रिक्त नहीं है की जरूरत है। तो शायद बेहतर tu उपयोग:
string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase);
जॉन के रूप में सुझाव दिया
संपादित करें: बग को सही
string.Compare(string1, string2, true)
इसमें आई 18 एन समस्याएं हो सकती हैं। –
StringComparer
स्थिर वर्ग पर गुण है कि किसी भी प्रकार के comparers लौटने की एक संख्या हैं केस-सेंसिटीविटी जो आप चाहें:
उदाहरण के लिए, आप कॉल कर सकते हैं
StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)
या
StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)
यह थोड़ा string.Equals
या string.Compare
भार के कि एक StringComparison
तर्क ले तुलना में क्लीनर है।
मैं तो इन तुलना तरीकों के अंत में टाइपिंग के लिए इस्तेमाल किया कर रहा हूँ: , StringComparison.
तो मैं एक विस्तार कर दिया।
namespace System
{ public static class StringExtension
{
public static bool Equals(this string thisString, string compareString,
StringComparison stringComparison)
{
return string.Equals(thisString, compareString, stringComparison);
}
}
}
बस ध्यान दें कि आप पहले ext बुला लिए thisString
पर अशक्त के लिए जाँच करने की आवश्यकता होगी।
सबसे अच्छा तरीका है पत्र के मामले की अनदेखी 2 तार की तुलना करने के String.Equals स्थिर विधि को निर्दिष्ट एक क्रमसूचक उपेक्षा मामले स्ट्रिंग तुलना उपयोग करने के लिए है। यह तारों को कम या ऊपरी मामले में बदलने और उसके बाद तुलना करने से कहीं अधिक तेज़ तरीका है।
मैंने दोनों दृष्टिकोणों के प्रदर्शन का परीक्षण किया और सामान्य अनदेखा केस स्ट्रिंग तुलना 9 गुना तेज से अधिक थी! स्ट्रिंग्स को निम्न या ऊपरी मामले में परिवर्तित करने से भी अधिक विश्वसनीय है (तुर्की I समस्या देखें)। तो हमेशा समानता के लिए तार की तुलना करने के String.Equals विधि का उपयोग करें:
String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase);
आप एक विशिष्ट संस्कृति स्ट्रिंग तुलना आप निम्नलिखित कोड का उपयोग कर सकते प्रदर्शन करने के लिए करना चाहते हैं:
String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);
कृपया ध्यान दें कि दूसरे उदाहरण का उपयोग करता है वर्तमान संस्कृति की स्ट्रिंग तुलना तर्क, जो इसे पहले उदाहरण में "सामान्य अनदेखा मामला" तुलना से धीमा कर देता है, इसलिए यदि आपको किसी भी संस्कृति विशिष्ट स्ट्रिंग तुलना तर्क की आवश्यकता नहीं है और आप अधिकतम प्रदर्शन के बाद हैं, तो " सामान्य अनदेखा मामला "तुलना।
अधिक जानकारी के लिए, read the full story on my blog।
'ToLower' या' ToLowerInvariant' का सुझाव न दें: वे तुलना करने के लिए स्मृति बनाते हैं, और वे असफल हो सकते हैं क्योंकि नए वर्ण सेट यूनिकोड में जोड़े जाते हैं। 'ToUpper' तुर्की 'i' के कारण दूसरों के बीच विफल रहता है; इसी कारण से भविष्य में 'ToLower' विफल नहीं होगा इसका कोई कारण नहीं है। – antiduh
@antiduh, आपकी टिप्पणी के लिए धन्यवाद। हम में से अधिकांश इन संभावित समस्याओं से अवगत हैं, इंटरनेट पर कई ट्यूटोरियल तुर्की 'मैं' उदाहरण के रूप में देते हैं। जैसा कि आप मेरी पोस्ट में देखते हैं, मैं 'ToLower' या' ToLowerInvariant' विधियों का उपयोग करने की अनुशंसा नहीं करता हूं, मैं बस यह दिखाना चाहता था कि 'स्ट्रिंग। एक्वाल्स' विधि कितनी अधिक कुशल है। –
"हम में से अधिकांश इन संभावित समस्याओं से अवगत हैं, इंटरनेट पर कई ट्यूटोरियल तुर्की 'मैं' उदाहरण के रूप में देते हैं" - पर्याप्त लोग नहीं हैं, और आप अभी भी इसे अपने उत्तर में दूसरी वाक्य के रूप में उल्लेख कर रहे हैं। इसके अलावा, आपके * उत्तर * में इसका उपयोग करने के लिए पर्याप्त औचित्य शामिल नहीं है - आप बस प्रदर्शन का उल्लेख करते हैं; प्रदर्शन हमेशा परम प्राथमिकता नहीं है। नतीजतन, आप वर्तमान में सहायता केंद्र दिशानिर्देशों का उल्लंघन कर रहे हैं; बाहरी साइटों के लिंक ठीक हैं, लेकिन आपने सामग्री को पर्याप्त रूप से सारांशित नहीं किया है (तुर्की 'मैं' समस्या)। तो आपका विज्ञापन मंच नहीं है। – antiduh
अन्य उत्तर यहां पूरी तरह मान्य हैं, लेकिन किसी भी तरह StringComparison.OrdinalIgnoreCase
टाइप करने और String.Compare
का उपयोग करने में कुछ समय लगता है।
मैं साधारण स्ट्रिंग विस्तार विधि है, जहां आप अगर तुलना केस संवेदी या मामले बूलियन साथ बेहोश है निर्दिष्ट कर सकते हैं कोड जोड़ने के बाद - निम्नलिखित जवाब देखें:
की [Caselessly सी # में तार की तुलना] संभव डुप्लिकेट (http://stackoverflow.com/questions/501906/caselessly-comparing-strings-in-c-sharp) – nawfal
यदि कोई व्यक्ति इस प्रश्न पर ठोकर खाता है तो किसी शब्द के लिए केस असंवेदनशील तुलना की तलाश में, इस प्रश्न पर एक नज़र डालें यहां: [जेनेरिक शब्दकोश के लिए केस असंवेदनशील पहुंच] (http://stackoverflow.com/questions/13230414/case-insensitive-access-for-generic-dic tionary) –
Robotnik
यह वास्तव में अच्छा होगा; केस-असंवेदनशील संस्करण के रूप में समानांतर '~=' को समानांतर' ==' परिभाषित करने के लिए कहें। – eidylon