2010-06-25 13 views
11

मैं उपयोगकर्ता नाम पढ़ रहा हूं और फिर यह देखने के लिए जांच कर रहा हूं कि किसी अन्य डेटाबेस तालिका में मौजूद है या नहीं, समस्या तब होती है जब उपयोगकर्ता नाम समान होता है और मामला उदाहरण उदाहरण जेस्मिथ को ढूंढने से रोकता है और जेएसमिथ या जेएसएमआईथ।सी # विभिन्न मामलों के साथ तारों की तुलना

मैं इसे कैसे ठीक कर सकता हूं? क्या मुझे पहले डेटाबेस में लिखते समय मामले को कम करना चाहिए या जब मैं दो की तुलना कर रहा हूं तो क्या मैं नीचे अपना कोड बदल सकता हूं?

drUser["Enrolled"] = 
    (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1); 

अद्यतन:

अभी भी इस के साथ संघर्ष कर, compiles नीचे कोड लेकिन सही परिणाम नहीं दे करता है, जब नामांकित उपयोगकर्ताओं को देख मैं उन है कि नामांकित नहीं कर रहे हैं देखते हैं, नहीं कर रहे हैं कि जब उन को देखने नामांकित मैं 1 देखता हूं जो नामांकित है लेकिन उनका उपयोगकर्ता नाम केस प्रत्येक डेटाबेस में समान है। क्या मैंने नीचे दिए गए कोड को सही तरीके से स्वरूपित किया है?

drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase))); 

धन्यवाद जेमी

+1

डांग, मैं बहुत धीमी थी। सोचा कि यह मेरे लिए जवाब देने के लिए उचित होगा ..;) – jsmith

+0

@ जेस्मिथ: क्या? – SLaks

+1

@SLaks उसका उदाहरण नाम .. मेरा उपयोगकर्ता नाम है .. :) – jsmith

उत्तर

21

आप Equals method है, जो एक StringComparison पैरामीटर लेता है कैलोरी की जरूरत है।

उदाहरण के लिए:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase) 

x.Usernamenull हो सकता है, तो आप कॉल करना चाहिए static Equals method:

String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase) 

अन्यथा, x.Username.Equals एक NullReferenceException फेंक कर सकते हैं।

+0

मोटी आवाज के लिए खेद है लेकिन नीचे दिया गया कोड सही ढंग से काम नहीं करता है, यह संकलित करता है लेकिन मिलान करने वाले उपयोगकर्ताओं को नहीं ढूंढता है। drUser ["नामांकित"] = (नामांकित उपयोगकर्ता। FIindIndex (x => x.Username.Equals ((स्ट्रिंग) drUser ["उपयोगकर्ता नाम"], स्ट्रिंग कॉम्पर्सन .ऑर्डिनल इग्नोरकेस)); – Jamie

+0

बस अपडेट करने का प्रयास किया, और यह संकलित नहीं है। मुझसे कहां गलती हो रही है? drUser ["नामांकित"] = (नामांकित यूजर। फाइंडइंडेक्स (स्ट्रिंग। एक्वाल्स (x.Username, (स्ट्रिंग) drUser ["उपयोगकर्ता नाम"], स्ट्रिंग कॉम्पर्सन .ऑर्डिनल इग्नोरकेस)); – Jamie

+0

कृपया अपना प्रश्न संपादित करें और अपना सटीक कोड जोड़ें। – SLaks

3

यह करने के लिए पसंदीदा तरीका, बजाय,

string.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase 

की तरह कुछ का उपयोग कर समानता की जांच करने के लिए द्वारा स्ट्रिंग तुलना निर्दिष्ट करने के लिए है "=="

+0

यह संकलित नहीं होगा (आप कास्ट करना भूल गए हैं)। – SLaks

+0

अच्छी जगह - धन्यवाद! –

0

कैसे toupper उपयोग के बारे में() ।

if(!(dr["Enrolled"] == null || dr["Username"] == null)) 
{ 
    if(dr["Enrolled"].ToString().ToUpperInvariant()== dr["Username"].ToString().ToUpperInvariant()) 
    { 
     //Do Something 
    } 
} 
+0

कृपया नीचे वोट के लिए एक कारण प्रदान करें। मैं जानना चाहता हूं कि यह कोड एक बुरा अभ्यास क्यों है। धन्यवाद – MikeTWebb

+0

मैंने आपको कम नहीं किया, लेकिन मुझे लगता है कि क्यों। सबसे पहले, अगर कोई मूल्य शून्य है तो यह विस्फोट हो जाएगा। दूसरा, यह संस्कृति को जागरूक नहीं है। यह अंग्रेजी (और कई अन्य भाषाओं में भी) के लिए काम कर सकता है, लेकिन सभी नहीं। उल्लिखित उद्धरण उदाहरण "तुर्की केस" है: http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html नेट आपको सांस्कृतिक रूप से जागरूक स्ट्रिंग तुलना मुफ्त में देता है - उन्हें इस्तेमाल करें! –

+0

सुदूर .... स्पष्टीकरण के लिए धन्यवाद। बहुत सराहना की। हाँ, जहां तक ​​एनयूएलएल .... कोड उदाहरण बुलेट प्रूफ होने का इरादा नहीं था। मैं हमेशा एनयूएलएस की जांच करता हूं। – MikeTWebb

0

क्या आपने यह कोशिश की है?

string userName = (string)drUser["Username"]; 
bool enrolled = enrolledUsers.Exists(x => 
    string.Equals(x.Name, userName, StringComparison.CurrentCultureIgnoreCase)); 

क्या कोई कारण है कि आप FindIndex का उपयोग कर रहे हैं?

0

string.compare विधि आज़माएं। all overloads

या एक अधिक specific one

और कुछ नहीं करते हैं, तो मुझे आशा है कि यह शिक्षित करता है।

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