C#中的枚举方法

Eya*_*Eya 136 c# enums enumeration

在Java中,可以在枚举中包含方法.

在C#中是否存在这样的可能性,或者它只是一个字符串集合而且就是这样吗?

我试图覆盖ToString()但它不编译.有人有简单的代码示例吗?

Mar*_*lug 235

您可以为枚举类型编写扩展方法:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Jay*_*ggs 19

您可以为枚举编写扩展方法:

如何:为枚举创建新方法(C#编程指南)


fab*_*tto 11

另一种选择是使用Jimmy Bogard创建的枚举类.

基本上,你必须创建一个继承自他的类Enumeration.例:

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}!";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像枚举一样使用它,可以将方法放入其中(除此之外):

EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
Run Code Online (Sandbox Code Playgroud)

您可以使用NuGet下载它.

虽然这种实现在语言中不是本机的,但语法(构造和用法)非常接近于本地优于C#(例如Kotlin)实现枚举的语言.