使用运算符&c#中的枚举

本文关键字:枚举 运算符 | 更新日期: 2023-09-27 18:04:20

我在我的应用程序中有一个枚举来表示保存选项,用户可以用线条、圆圈、矩形或任何组合来保存图像,所以我声明了一个枚举来表示保存选项。

enum SaveOption{lines,circles,rectangles};

如何使用操作符

  • 在选项
  • 中添加选项
  • 从选项
  • 中删除选项

使用运算符&c#中的枚举

[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);
}