在C#中枚举的方法

在Java中,有一个选项可以使用enum对象来写入enum和函数。

在C#中是否有这样的可能性,或者它只是一个string集合,就是这样?

我试图“覆盖” ToString()函数,它不编译。 有人有一个简单的代码示例?

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

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

你可以为你的枚举写一个扩展方法:

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

另一种select是使用由Jimmy Bogard创build的枚举类 。

基本上你必须创build一个从他的Enumerationinheritance的类。 例:

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

那么你可以像使用枚举一样使用它,并且可以将方法放入其中(另一个方法):

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

你可以用NuGet下载。

不。 你可以创build一个类,然后添加一堆属性到类来模仿一个枚举,但那不是真的一样的事情

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

更好的模式是将你的方法放在与你的emum分开的类中。

C#不允许在枚举器中使用方法,因为它不是一个基于类的原则,而是一个带有string和值的二维数组。

在这种情况下,Microsoft非常沮丧地使用类,而不是使用(data)struct(ures); STRUCT的目的是作为数据及其处理程序的轻量级,并且可以很好地处理函数。 C#及其编译器没有像JAVA那样知道跟踪和效率的能力,在这种情况下,某个类/方法被使用的次数越多,运行的速度就越快,并且它的使用会变成“预期的”。 C#根本没有,所以区分,使用STRUCT而不是CLASS。