अन्य उत्तरों के प्रदर्शन के रूप में यहां जरूरी नहीं है, लेकिन अन्य मामलों में जहां आप एक स्ट्रिंग का उपयोग नहीं कर रहे हैं, तो आप IEqualityComparer<T>
को कार्यान्वित करना चुन सकते हैं और फिर आप .Contains
ओवरलोड का उपयोग कर सकते हैं। यहां एक स्ट्रिंग का उपयोग करके एक उदाहरण दिया गया है (फिर से, अन्य उत्तरों ने दिखाया है कि पहले से ही एक स्ट्रिंग तुलनाकर्ता है जिसका उपयोग आप अपनी आवश्यकताओं को पूरा कर सकते हैं)। IEnumerable<T>
के आसपास कई विधियों में अधिभार है जो ऐसे तुलनाकर्ताओं को स्वीकार करते हैं, इसलिए उन्हें सीखना सीखना अच्छा होता है।
class CustomStringComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.Equals(y, StringComparison.InvariantCultureIgnoreCase);
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
और फिर का उपयोग यह
bool contains = hash.Contains("foo", new CustomStringComparer());
स्रोत
2010-04-19 13:21:52
एक sidenode: जब एक 'सामान्य' 'HashSet' (केस संवेदी) बनाई गई है, यह एक 'contains' विधि कुशल है कि बनाने के लिए असंभव है। ऐसा इसलिए है क्योंकि तत्वों के हैंश बनाए जाते हैं जब उन्हें 'हैशसेट' में जोड़ा जाता है। और आंतरिक रूप से 'शामिल' विधि हैश को कुशल होने की जांच करता है। किसी मौजूदा हैश फॉर्म 'केस सेंसिटिव' को 'केस असंवेदनशील' में परिवर्तित करना (कुशलतापूर्वक) करना संभव नहीं है। –
Julian