valor usar recorrer pasar parse parametro obtener enumerador enum convertir convert como buscar c# enums gethashcode

c# - usar - Usando GetHashCode para obtener el valor int de Enum



pasar enum como parametro c# (7)

Tengo una enumeración

public enum INFLOW_SEARCH_ON { ON_ENTITY_HANDLE = 0, ON_LABEL = 1, ON_NODE_HANDLE = 2 } // enum INFLOW_SEARCH_ON

Tengo que usar esta enumeración para seraching en una cuadrícula columnas

Para obtener el índice de columna que estoy usando

MyEnumVariable.GetHashCode()

Que funciona bien, o debería usar

(short)MyEnumVariable

Estoy un poco confundido sobre el uso de GetHashCode (). ¿Hay algún problema con eso?


Cuando hice el perfilado, Enum.GetHashCode tomó muchos ciclos. Pude mejorarlo usando (int) Enum cuando sea posible.


Debe utilizar (int) MyEnumVariable . Todas las enumeraciones por defecto son heredadas de int .


Debería usar (int)MyEnumVariable para obtener el valor literal ... también puede convertir la otra forma como (INFLOW_SEARCH_ON)int


Otros han dicho por qué el casting a int es mejor.

Otra razón para no usar GetHashCode es el rendimiento. Causa el boxeo. En mis pruebas rápidas, GetHashCode fue aproximadamente 50 veces más lento (si es que importa).


También tiene los métodos de opción proporcionados por la clase estática Enum. Por ejemplo:

Enum.TryParse<TEnum>(string ValueType, out TEnum Result)

Si todo lo que intenta hacer es obtener el valor del Enum. Puede obtener la cadena ValueType, por ejemplo, "ON_ENTITY_HANDLE" con Enum.GetName(...) .

De lo contrario, la conversión a (int) definitivamente se preferiría a GetHashCode() .


Usar GetHashCode() es incorrecto Deberías lanzar a int . Usarlo de la manera que lo haces es pedir que las rapaces (o Raymond) vengan y te coman.

Que GetHashCode() devuelva el valor entero de la enumeración es un detalle de implementación y puede cambiar en versiones futuras de .net.

GetHashCode() garantiza que si dos valores son equal sus códigos hash también lo son. El revés no está garantizado.

Mi regla de oro es que si GetHashCode devolviera un valor constante, su programa debería funcionar correctamente (pero potencialmente ser mucho más lento), ya que un GetHashCode constante cumple el contrato de manera trivial, pero tiene propiedades de distribución erróneas.


Veo algunos comentarios que describen las desventajas de usar GetHashCode () por muchas razones.

Hay algunos casos en los que (int) INFLOW_SEARCH_ON.ON_LABEL no funciona.

Una buena manera de obtener el valor int de Enum es usar el método GeTTypeCode (). Este método funciona independientemente del tipo subyacente. En este caso es int.

public enum INFLOW_SEARCH_ON { ON_ENTITY_HANDLE = 0, ON_LABEL = 1, ON_NODE_HANDLE = 2 } // enum INFLOW_SEARCH_ON INFLOW_SEARCH_ON selectedType = INFLOW_SEARCH_ON.ON_LABEL; object val = Convert.ChangeType(selectedType, selectedType.GetTypeCode()); Console.WriteLine(val);

La salida en este caso es ''1''.

Referencia: Obtener valor int de enum