it-swarm.com.de

Methoden in enum in C #

In Java ist es möglich, Methoden in einer Enumeration zu haben.

Gibt es eine solche Möglichkeit in C # oder ist es nur eine String-Auflistung und das wars?

Ich habe versucht, ToString() zu überschreiben, aber es wird nicht kompiliert. Hat jemand ein einfaches Codebeispiel?

129
Eya

Sie können Erweiterungsmethoden für Aufzählungstypen schreiben:

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();
    }
}
225
MarkPflug

Sie können eine Erweiterungsmethode für Ihre Aufzählung schreiben:

Gewusst wie: Erstellen einer neuen Methode für eine Aufzählung (C # -Programmierhandbuch)

18
Jay Riggs

Eine andere Möglichkeit ist die Verwendung der Aufzählungsklasse , die von Jimmy Bogard erstellt wurde.

Grundsätzlich müssen Sie eine Klasse erstellen, die von seinem Enumeration erbt. Beispiel:

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}!";
    }
}

Dann können Sie es wie eine Aufzählung verwenden, mit der Möglichkeit, Methoden darin abzulegen (unter anderem):

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

Du kannst es mit NuGet . herunterladen

Obwohl diese Implementierung in der Sprache nicht systemeigen ist, kommt die Syntax (Konstruktion und Verwendung) Sprachen sehr nahe, die Enums besser implementieren als C # ( Kotlin zum Beispiel).

9

Nee. Sie können eine Klasse erstellen und der Klasse dann eine Reihe von Eigenschaften hinzufügen, um etwas eine Aufzählung zu emulieren, aber das ist nicht wirklich dasselbe.

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.
    }
}

Ein besseres Muster wäre, Ihre Methoden einer Klasse zuzuordnen, die von Ihrem Emum getrennt ist.

3
Kyle Trauberman

Da ich auf das genaue Gegenteil von Enum zu String gestoßen bin, ist hier eine generische Lösung:

static class EnumExtensions {
    public static T GetEnum<T>(this string itemName) {
        return (T) Enum.Parse(typeof(T), itemName, true);
    }
}

Dies ignoriert auch die Groß- und Kleinschreibung und ist sehr praktisch, um die REST-Antwort auf Ihre Aufzählung zu analysieren, um mehr Typensicherheit zu erhalten. Hoffentlich hilft es jemandem

0
scrat84