En su código - sí. Pero si reemplaza GetHashCode() en U Class y luego realiza algunos cambios que cambiarán el valor de GetHashCode() e invocarán a Assert, es posible que sea falso, porque Dictionary se implementa como una tabla hash. El siguiente código devuelve falso:
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;
}
}
¿Es correcto decir que SortedDictionary ha especificado el orden en las teclas? –
@RayCheng La documentación que cité se refiere a la clase 'Diccionario'. Para responder a su pregunta, debe verificar la documentación de 'SortedDictionary.Keys', que dice" Las claves en 'SortedDictionary .KeyCollection' se ordenan según la propiedad' Comparer' y están en el mismo orden como los valores asociados en 'SortedDictionary .ValueCollection' devueltos por la propiedad' Values'. Así que la respuesta a tu pregunta es sí*. –
CodesInChaos