En Java, es posible tener métodos dentro de una enumeración.
¿Existe tal posibilidad en C # o es solo una colección de cadenas y eso es todo?
Traté de anular ToString()
pero no se compila. ¿Alguien tiene una muestra de código simple?
c#
enums
enumeration
Eya
fuente
fuente
Respuestas:
Puede escribir métodos de extensión para tipos de enumeración:
fuente
Puede escribir un método de extensión para su enumeración:
Cómo: Crear un nuevo método para una enumeración (Guía de programación de C #)
fuente
Otra opción es usar la clase de enumeración creada por Jimmy Bogard .
Básicamente, debes crear una clase que herede de la suya
Enumeration
. Ejemplo:Luego puede usarlo como una enumeración, con la posibilidad de poner métodos dentro de él (entre otras cosas):
Puedes descargarlo con NuGet .
Aunque esta implementación no es nativa en el lenguaje, la sintaxis (construcción y uso) está bastante cerca de los lenguajes que implementan enumeraciones de forma nativa mejor que C # ( Kotlin, por ejemplo).
fuente
No Puede crear una clase, a continuación, añadir un montón de propiedades a la clase a un tanto emular una enumeración, pero eso no es realmente lo mismo .
Un mejor patrón sería colocar sus métodos en una clase separada de su emum.
fuente
Desde que me encontré, y necesitaba exactamente lo contrario de enum a string, aquí hay una solución genérica:
Esto también ignora mayúsculas y minúsculas y es muy útil para analizar REST-Response a su enumeración para obtener más seguridad de tipo. Espero que ayude a alguien
fuente
C # no permite el uso de métodos en enumeradores, ya que no es un principio basado en clases, sino más bien una matriz bidimensional con una cadena y un valor.
El uso de clases es altamente desaconsejado por Microsoft en este caso, utilice estructuras (ures) (datos) en su lugar; El STRUCT está pensado como una clase ligera para datos y sus manejadores y puede manejar funciones perfectamente. C # y su compilador no tienen las capacidades de seguimiento y eficiencia como se sabe de JAVA, donde cuantas más veces se usa una determinada clase / método, más rápido se ejecuta y su uso se vuelve 'anticipado'. C # simplemente no tiene eso, así que para diferenciar, use STRUCT en lugar de CLASS.
fuente