使用运算符&c#中的枚举
本文关键字:枚举 运算符 | 更新日期: 2023-09-27 18:04:20
我在我的应用程序中有一个枚举来表示保存选项,用户可以用线条、圆圈、矩形或任何组合来保存图像,所以我声明了一个枚举来表示保存选项。
enum SaveOption{lines,circles,rectangles};
如何使用操作符
- 在选项 中添加选项
- 从选项 中删除选项
用[Flags]
属性标记枚举,并给每个可能的值一个唯一的位值:
[Flags]
enum SaveOption
{
lines = 0x1,
circles = 0x2,
rectangles = 0x4
}
然后你可以这样做:
SaveOption options;
option = SaveOption.lines | SaveOption.circles; // lines + circles
option |= SaveOptions.rectangles; // now includes rectangles
option &= ~SaveOptions.circles; // now excludes circles
最后,对于ref,每个选项必须有一个由单个位表示的值,因此在十六进制中是0x1
, 0x2
, 0x4
, 0x8
,然后是0x10
, 0x20
, 0x40
, 0x80
等。这比1、2、4、8、16、32、64、128、256,512、1024、2048、4096、8192、16384、32768、65536更容易记住。这是我记得的:)
首先,您需要指定以位方式工作的值。您还最好使用FlagsAttribute
来装饰枚举。按照命名约定,您还可以将其重命名为复数形式。你会得到:
[Flags]
enum SaveOptions
{
None = 0,
Lines = 1,
Circles = 2,
Rectangles = 4
}
你可以这样做:
SaveOptions foo = SaveOptions.Lines | SaveOptions.Rectangles;
和类似的位操作
FlagsAttribute
将改变枚举值与字符串之间的转换方式。为了使按位操作正常工作,实际上并不需要,但这绝对是一个强大的约定,并且通常是一个好主意。
使用Flags属性。不要忘记为枚举的每个成员指定唯一的位值:
[Flags]
enum SaveOption
{
lines = 1,
circles = 2,
rectangles = 4
}
你需要一个cast:
(SaveOption) (lines | circles)
或
SaveOption option = (SaveOption) (lines | circles);
(SaveOption) ((option & ~lines) | rectangle)
还需要为枚举成员赋位值(就像在其他一些答案中一样)。
注意:我省略了一些c#语法,这适用于。net 2,以后的版本可能会清理这些语法
至于操作标志;
[Flags]
public enum SaveOption
{
Lines = 1,
Circles = 2,
Rectangles = 4
}
static void Main(string[] args)
{
SaveOption option = SaveOption.Circles | SaveOption.Rectangles;
Console.WriteLine( option );
option -= SaveOption.Circles;
Console.WriteLine( option );
option = option | SaveOption.Lines;
Console.WriteLine(option);
}