【发布时间】:2013-03-11 14:59:36
【问题描述】:
为了这个例子,假设我正在尝试解析一个文件,该文件指定记录中的两个任意字节代表一周中的哪一天,因此:
DayOfWeek:
- 0 = Monday
- 1 = Tuesday
- 2 = Wednesday
- 3 = Thursday
- 4 = Friday
- 5 = Saturday
- 6 = Sunday
- 7-15 = Reserved for Future Use
我可以定义一个枚举来映射到这个字段,因此:
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6
ReservedForFutureUse
}
但是如何为ReservedForFutureUse 定义有效值?理想情况下,我想做这样的事情:
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6
ReservedForFutureUse = {7,8,9,10,11,12,13,14,15}
}
这个问题只会在更复杂的领域加剧;例如,假设在这种情况下,7 和 8 都映射到相同的错误情况或其他东西。如何在 C# 枚举中捕获这一要求?
【问题讨论】:
-
这个问题:如果往另一个方向发展,它会如何工作?从 int 值转到 enum 是可行的,但是如果您以另一种方式执行,c# 将如何知道 enum 应该转换为哪个 int 值?
-
我想 type-safe-enum 模式应该很有趣。看看:stackoverflow.com/a/424414/1236044
-
您能描述一下您将如何使用这个“保留”值吗?您将来会更改枚举,那么为什么要添加一些将更改的值(对于列出的值之一不是必需的)
-
在这种特殊情况下,它只是一个例子;在实际问题中,实际上有几个字段可以是多个值之一。
-
这是另一个动态生成枚举程序集的答案 - stackoverflow.com/a/792332/546000。有趣的东西。具有“保留”值的枚举的前提与枚举的概念相反。最多,如果您有一个包含大量查找表的数据库,生成一个枚举 DLL 可以帮助节省键入...但是动态生成一个动态生成会使得使用和调试非常困难。