Answers:
您可以为枚举类型编写扩展方法:
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();
}
}
您可以为枚举编写扩展方法:
另一个选择是使用Jimmy Bogard创建的Enumeration Class。
基本上,您必须创建一个继承自他的类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}!";
}
}
然后,您可以像枚举一样使用它,并可以将方法放入其中(还有其他事情):
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
您可以使用NuGet下载它。
尽管此实现不是该语言的本机,但其语法(构造和用法)与本机实现比C#更好的枚举的语言(例如Kotlin)非常接近。
不。您可以创建一个类,然后向该类添加一堆属性以某种程度上模拟枚举,但这并不是一回事。
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#不允许在枚举器中使用方法,因为它不是基于类的原理,而是带有字符串和值的二维数组。
在这种情况下,Microsoft强烈建议不要使用类,而应使用(data)struct(ures);STRUCT旨在作为数据及其处理程序的轻型类,并且可以很好地处理函数。正如JAVA所知,C#及其编译器不具有跟踪和效率功能,在这种情况下,使用某个类/方法的次数越多,它运行的速度就越快,并且其使用就变得“预期中”。C#根本没有这样的东西,因此为了区别起见,请使用STRUCT而不是CLASS。