Pregunta

Posibles Duplicados:
¿Cuál es el mejor algoritmo para anulado Sistema.Objeto.GetHashCode?

Esto es conocido para nosotros que si queremos reemplazar el Equals método de Object en nuestros tipos personalizados, también debemos anular y proporcionar una implementación de GetHashCode método para apoyar la generación de códigos hash únicos para su uso en apoyo de Hashtable y Dictionary clases de colección y pueden existir otras clases.

Este mandatos de nuestra implementación del algoritmo de hash se utiliza dentro de nuestro overriden GetHashCode el método es óptimo y preciso es decir,se genera un hash único del tipo y de la que también hace que tan pronto como sea posible para mejorar el rendimiento de la aplicación que utiliza nuestro tipo.

Mi pregunta es los algoritmos de hash son precisos y dar un rendimiento óptimo cuando se utiliza en GetHashCode la aplicación?O, si sólo utilizamos la base del tipo de GetHashCode la aplicación?Me gustaría saber la respuesta para ambos value types y reference types..

Editar:He aquí un ejemplo de una clase de abajo de ¿por qué yo tendría que reemplazar Equals:

public class Laptop : LaptopBase
{
    public readonly string Make;
    public readonly string ProcessorArch;
    public readonly int MemorySupported;
    public readonly int HardDiskGBSupported;
    public readonly Color ColorName;

    public Laptop(make, procArch, memorySupp, hdGB, color)
    {
        Make = make;
        ProcessorArch = procArch;
        MemorySupported = memorySupp;
        HardDiskGBSupported = hdGB;
        ColorName = color;
    }
}

Ahora, quiero devolver true para 2 Laptop instancias que tienen todos los definidos anteriormente, los campos coincidentes entre sí, de modo que se requiere para reemplazar la Equals y GetHashCode método y también otro requisito como se puede ver es que esta es una clase derivada y se pueden volver a utilizar más y el apoyo de un número de métodos;y por lo tanto, no se puede hacer un tipo de valor (struct).He probado con 2 instancias de arriba escriba con la coincidencia de todos los campos de instancia y si yo uso la base de la aplicación de Equals - regresa false donde yo quiero estar true.. ¿Cómo puedo apoyar a un escenario?

¿Fue útil?

Solución

Depende de el tipo que se aplica, pero debe darle una buena dispersión de los valores, y NO es una necesidad para GetHashCode() para devolver una única valores.Se debe basar en los campos que se utilizan en la es Igual a la implementación y los campos deben ser inmutables.Así los requisitos de Iguala/GetHashCode son los mismos para las estructuras y clases.

Y como dijo Henk, es mejor no Equivale a anular/GetHashCode en todos los...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top