我想知道带有标记属性的枚举类型大多用于按位运算,为什么编译器不会在未定义枚举值时自动生成值。
例如:
[Flags] public enum MyColor { Yellow = 1, Green = 2, Red = 4, Blue = 8 }
如果未分配这些值,自动生成1、2、4和8将会很有帮助。希望了解您的想法。
我想知道带有标记属性的枚举类型大多用于按位运算,为什么编译器不会在未定义枚举值时自动生成值。
例如:
[Flags] public enum MyColor { Yellow = 1, Green = 2, Red = 4, Blue = 8 }
如果未分配这些值,自动生成1、2、4和8将会很有帮助。希望了解您的想法。
这个稍微容易一些:
[Flags]
public enum MyColor
{
Yellow = 1<<0,
Green = 1<<1,
Red = 1<<2,
Blue = 1<<3
}
我认为,这主要归结于第一个值的巨大混乱。请考虑以下情况:
[Flags]
public enum MyColor
{
Yellow,
Green,
Red,
Blue
}
public class SomeClass
{
public MyColor SomeColor; // Yellow or undefined by default?
}
[Flags]
public enum MyColor
{
Black, //0
Yellow, //1
Green, //2
Red, //3
Blue //4
}
但我猜很少有人会意识到这一点(没有上面的评论)。而且还会出现更棘手的问题:
[Flags]
public enum MyColor
{
Black,
Red,
Green,
Blue,
Magenta = Red | Blue,
Yellow = Red | Green | Blue,
SomeOtherColor // now what would the value of this automatically be?
}
最好明确说明以避免混淆! :-)