具有子类型的枚举 c#

Enumeration with subtypes c#

首先,这可能是设计不当导致的问题。 这是我的简化场景:

我有一个 class 调用 Day,它代表一年中的某一天,包含它的日期和日期的“类型”。

public class Day{
 Date Key;
 TypeDay type;
}

所以这一天可以是工作日或假期:

public enum TypeDay{
    Work,
    Holiday
}

到目前为止一切顺利,但现在假期可以有 paidDays 和 NonPaid days 等子类型 我需要另一个枚举来表示子类型或在单个枚举中添加所有子类型(在这个例子中我有 2 天和 2 个子类型但在现实生活中我有 50-40 种类型)所以这变得如此混乱。

 public enum TypeDay{
        Work,
        Holiday_NonPaid
        Holiday_Paid
    }

我怎样才能更好地构建它,有什么想法吗?

枚举器不支持这种行为,如果您觉得需要这样的结构,您可以 'simulate' 使用静态 class

static class TypeDay
{
    public const int Work = 0;

    public static class Holiday
    {
        public const int Paid = 1;
        public const int NonPaid = 2;
    }
}

您可以使用标志将 'paid' 和 'holiday' 视为枚举的独立属性:

[Flags]
public enum TypeDay{
        Na = 0,
        Work = 1,
        Holiday = 2,     
        Holiday_NonPaid = Holiday,
        Holiday_Paid = Holiday | Work 
    }

这假设一个工作日是带薪的。这使您可以检查确切的类型,或者该日期是否有特定标志,isHoliday = type.HasFlag(TypeDay.Holiday)isPaid = type.HasFlag(TypeDay.Work).

但还有其他方法,例如使用 类 而不是 enums.The 最合适的方法将取决于确切的用例以及您要对这些值执行的操作。