使用布尔结果,添加到枚举以作为参数传递?

use*_*406 1 c# enums

我试图建立一组枚举选择,以传递给另一个方法的参数.假设你有枚举Foo,如下所示:

public enum Foo
{
   x,
   y,
   z
}
Run Code Online (Sandbox Code Playgroud)

现在,我将循环浏览一些复选框选项,每个选项卡指定是选择X,Y还是Z.

bool allowX = chkBxAllowX.Checked;
bool allowY = chkBxAllowY.Checked;
bool allowZ = allowZ.Checked;
Run Code Online (Sandbox Code Playgroud)

接下来,我必须建立选择以作为Foo枚举类型传递.我知道我可以使用"|"指定多个枚举值 字符,但如何根据其他值(即上述布尔值?)来做到这一点.因此,如果allowX,添加Foo.x,如果allowY,则指定Add Foo.y. 如果allowX和allowY,Foo.x和Foo.y.

Bra*_*tie 5

首先,你需要在枚举中使用默认值(并用它标记FlagsAttribute):

[Flags]
public enum Foo
{
  NoSelection = 0,
  X = 1, 
  Y = 2
  Z = 4
}
Run Code Online (Sandbox Code Playgroud)

完成后,您可以使用|=分配根据复选框状态添加标记.例如

Foo foo = Foo.NoSelection;

if (allowX) foo |= Foo.X;
if (allowY) foo |= Foo.Y;
if (allowZ) foo |= Foo.Z;
Run Code Online (Sandbox Code Playgroud)

然后,如果你想验证:

bool allowX = true;
bool allowY = false;
bool allowZ = true;

Foo foo = Foo.NoSelection;

if (allowX) foo |= Foo.X;
if (allowY) foo |= Foo.Y;
if (allowZ) foo |= Foo.Z;

Console.WriteLine("allowX = {0}", ((foo & Foo.X) == Foo.X) ? "true" : "false");
Console.WriteLine("allowY = {0}", ((foo & Foo.Y) == Foo.Y) ? "true" : "false");
Console.WriteLine("allowZ = {0}", ((foo & Foo.Z) == Foo.Z) ? "true" : "false");
Run Code Online (Sandbox Code Playgroud)