Nel codice - sì. Ma se si esegue l'override di GetHashCode() nella classe U e si apportano alcune modifiche che cambieranno il valore di GetHashCode() e si invocherà Assert, è possibile che sia falso, perché il dizionario viene implementato come tabella hash. Il codice successivo restituisce false:
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;
}
}
E 'corretto dire SortedDictionary aver specificato ordine sui tasti? –
@RayCheng La documentazione che ho citato si riferisce alla classe 'Dictionary'. Per rispondere alla tua domanda, devi controllare la documentazione di 'SortedDictionary.Keys', che dice" Le chiavi nel 'SortedDictionary .KeyCollection' sono ordinate in base alla proprietà' Comparer' e sono nello stesso ordine come i valori associati in 'SortedDictionary .ValueCollection' restituiti dalla proprietà' Values'. " Quindi la risposta alla tua domanda è * sì *. –
CodesInChaos