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)
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)实现枚举的语言.