आपके कोड में - हाँ। लेकिन यदि आप यू क्लास में GetHashCode() को ओवरराइड करते हैं और फिर कुछ बदलाव किए हैं जो GetHashCode() के मान को बदल देंगे और आवेषण का आह्वान करेंगे, तो यह संभव है कि यह गलत होगा, क्योंकि शब्दकोश को हैश तालिका के रूप में लागू किया गया है। अगले कोड झूठे रिटर्न:
class Program
{
static void Main(string[] args)
{
Dictionary<A, int> d = new Dictionary<A, int>();
for (int i = 1; i <= 10; i++)
{
d.Add(new A { Hash = i}, i);
}
DictionaryTest(5, d);
}
public static void DictionaryTest(int i, Dictionary<A, int> dict)
{
A key = dict.Keys.ToList()[i];
key.Hash = 4;
Console.WriteLine(dict[key].Equals(dict.Values.ToList()[i]));
Console.ReadKey();
}
}
public class A
{
public int Hash { get; set; }
public override bool Equals(object obj)
{
return this.GetHashCode() == obj.GetHashCode();
}
public override int GetHashCode()
{
return Hash;
}
}
क्या यह कहना सही है कि SortedDictionary ने चाबियों पर ऑर्डर निर्दिष्ट किया है? –
@ रेचेंग मैंने उद्धृत दस्तावेज 'डिक्शनरी' वर्ग को संदर्भित किया है। अपने प्रश्न का उत्तर देने के लिए, आपको 'SortedDictionary.Keys' के लिए प्रलेखन की जांच करने की आवश्यकता है, जो कहता है "' SortedDictionary 'में कुंजी' TKey, TValue> .KeyCollection' को 'तुलनाकर्ता' संपत्ति के अनुसार क्रमबद्ध किया गया है और उसी क्रम में हैं 'SortedDictionary। ValueCollection' में संबंधित मानों के रूप में 'मानों' गुण द्वारा लौटाया गया है।" तो आपके प्रश्न का उत्तर * हां * है। –
CodesInChaos