【发布时间】:2011-05-09 04:30:04
【问题描述】:
我刚刚意识到我在枚举中的“必须处理”值列表中添加了一个值,但直到运行时我才发现它。我知道 C# 编译器在类型的反射和自省方面非常强大,所以我想知道是否有办法强制 switch/case 语句覆盖所有可能的 enum 值?
例子:
enum Colors
{
Red,
Blue,
Green,
Yellow
};
Colors c = ...;
switch (c)
{
case Colors.Red: // No error, Red is a Color
break;
case Colors.Blue:
case Colors.Green: // No error, Blue and Green handled as well
break;
} // whoops! "error: 'Colors.Yellow' unhandled"
// or even, "error: no 'default' and 'Colors.Yellow' unhandled"
我想要一个编译时解决方案。
【问题讨论】:
-
我能想到的一种方法是创建一个抽象类,该类具有特定于每个枚举值的行为实现。虽然这会增加类的数量,但它会确保不会错过枚举值的实现。如果您需要一些代码示例,请告诉我。
标签: c#