具有子类型的枚举 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 最合适的方法将取决于确切的用例以及您要对这些值执行的操作。
首先,这可能是设计不当导致的问题。 这是我的简化场景:
我有一个 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 最合适的方法将取决于确切的用例以及您要对这些值执行的操作。