switch example enum clase c# enums enumeration

example - Métodos dentro de enum en C#



enum to list c# (5)

C # No permite el uso de métodos en los enumeradores, ya que no es un principio basado en la clase, 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, use (data) struct (ures) en su lugar; El STRUCT está pensado como una clase ligera para datos y sus manejadores y puede manejar funciones muy bien. C # y su compilador no tienen las capacidades de seguimiento y eficiencia que se conocen de JAVA, donde cuantas más veces se usa una determinada clase / método, más rápido se ejecuta y se "anticipa" su uso. C # simplemente no tiene eso, por lo que para diferenciar, usa STRUCT en lugar de CLASS.

En Java hay una opción para escribir enum y funciones dentro del objeto enum que se pueden usar.

¿Hay tal posibilidad en C # o es solo una colección de cuerdas y eso es todo?

Traté de "anular" la función ToString() y no compila. ¿Alguien tiene una muestra de código simple?


Nop. Puede crear una clase, luego agregar un conjunto de propiedades a la clase para emular un enum, pero eso no es realmente lo mismo .

class MyClass { public string MyString1 { get{ return "one";} } public string MyString2 { get{ return "two";} } public string MyString3 { get{ return "three";} } public void MyMethod() { // do something. } }

Un mejor patrón sería poner sus métodos en una clase separada de su emum.


Otra opción es usar la clase de enumeración creada por Jimmy Bogard .

Básicamente, debes crear una clase que herede de su Enumeration . Ejemplo:

public class EmployeeType : Enumeration { public static readonly EmployeeType Manager = new EmployeeType(0, "Manager"); public static readonly EmployeeType Servant = new EmployeeType(1, "Servant"); public static readonly EmployeeType Assistant = new EmployeeType(2, "Assistant to the Regional Manager"); private EmployeeType() { } private EmployeeType(int value, string displayName) : base(value, displayName) { } // Your method... public override string ToString() { return $"{value} - {displayName}!"; } }

Entonces puedes usarlo como una enumeración, con la posibilidad de poner métodos dentro de él (entre otras cosas):

EmployeeType.Manager.ToString(); //0 - Manager EmployeeType.Servant.ToString(); //1 - Servant EmployeeType.Assistant.ToString(); //2 - Assistant to the Regional Manager

Puedes descargarlo con NuGet .


Puede escribir métodos de extensión para tipos enum:

enum Stuff { Thing1, Thing2 } static class StuffMethods { public static String GetString(this Stuff s1) { switch (s1) { case Stuff.Thing1: return "Yeah!"; case Stuff.Thing2: return "Okay!"; default: return "What?!"; } } } class Program { static void Main(string[] args) { Stuff thing = Stuff.Thing1; String str = thing.GetString(); } }