C# 创建富枚举的想法
我为自己创建了几个相同结构的类——“富枚举”。因此,它立即表明,它可以被我将继承的另一个类以某种方式简化 我编写了一个示例类来向您展示这样的枚举包含什么:C# 创建富枚举的想法,c#,enums,C#,Enums,我为自己创建了几个相同结构的类——“富枚举”。因此,它立即表明,它可以被我将继承的另一个类以某种方式简化 我编写了一个示例类来向您展示这样的枚举包含什么: class RichEnum { // ??? } class MyEnum : RichEnum { // FIELDS AND CONSTRUCTOR(S) public readonly string A; public readonly int B; public readonly Objec
class RichEnum
{
// ???
}
class MyEnum : RichEnum
{
// FIELDS AND CONSTRUCTOR(S)
public readonly string A;
public readonly int B;
public readonly Object C;
public MyEnum(string A, int B, Object C)
{
this.A = A;
this.B = B;
this.C = C;
}
// STATIC INSTANCES
public static readonly MyEnum Example1 = new MyEnum("string1", 1, "object1");
public static readonly MyEnum Example2 = new MyEnum("string2", 2, "object2");
public static readonly MyEnum Example3 = new MyEnum("string3", 3, "object3");
// SPECIAL INSTANCE
public static readonly MyEnum Default = new MyEnum("default", 0, "default");
// SPECIAL OBJECT FOR ITERATING OVER STATIC INSTANCES
public static readonly MyEnum[] Values = { Example1, Example2, Example3 };
// METHODS
public int GetSomeNumber()
{
return B + 10;
}
}
我有很多不同的“myenum”,但是这些类都有相同的结构。因此,他们:
- 一些不同类型的公共只读字段(变量编号)
- 一个或多个构造函数
- 公共静态只读实例
- 一个特殊字段,用于在所有实例都无法匹配条件时返回值。例如,当我使用MyEnum.Values.FirstOrDefault(…)时,如果找不到任何内容,它将返回默认值
- 一些方法
有没有一种方法可以创建这种结构的一个类,然后从中继承,从而使过程更简单,更不容易出错?如果您仔细观察,这些类实际上没有任何可以抽象的共同点:
除非找到它们的共同点,否则无法创建基类。可以帮助您的是包含此类类的总体布局的代码片段,以加快您的键入速度。看看很久以前我在CodeProject上发布的这段代码 我不会发布所有的代码,虽然它不是很糟糕,但这里有一个实际使用它的示例。在本例中,我试图定义乘客的航空公司座位偏好的枚举
public class SeatType : DescriptiveEnum<SeatType, int>
{
public static readonly SeatType Window = new SeatType("Window Seat", 1);
public static readonly SeatType Aisle = new SeatType("Aisle Seat", 2);
public static readonly SeatType AnythingExceptSeatNearBathroom = new SeatType("Anything Except Seat Near Bathroom", 3);
private SeatType(string desc, int code)
: base(desc, code)
{
}
}
基本DescriptiveEnum类还嵌入了转换运算符,因此它的工作方式与枚举类似。也就是说,你可以说:
SeatType c = (SeatType) SomeMethodThatReturnsAnInt();
看来你正在重新发明轮子:
因此,如果您的目标只是提供这样一个“丰富”的枚举类,那么有一个Nuget包;如果你的目标是写你自己的。。。好吧,从现有技术中寻找灵感是没有坏处的。您可以尝试为“各种类型”创建一个具有多个类型参数的泛型类。
SeatType c = (SeatType) SomeMethodThatReturnsAnInt();