将多个枚举传递给方法并获取它们的值

Ari*_*ian 2 c# enums c#-4.0

请考虑以下代码:

public enum Status
{
    S1 = 1,
    S2 = 2,
    S3 = 3,
    S4 = 4
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用|oerator 将多个枚举传递给一个方法:

public void DoWork(Status S)
{
}
...
DoWork(Status.S1 | Status.S2);
Run Code Online (Sandbox Code Playgroud)

现在在DoWork方法中我想获取传递的枚举值.例如在上面的代码我想得到{1, 2}.我怎么做这个?谢谢

Per*_*t28 5

以下是获取标记枚举的几个步骤:

  1. 使用2 exp (n)整数(1,2,4,8,16,32,...)来定义枚举.为什么?:实际上,枚举的每个活动状态都将取一个32位整数的位.
  2. 添加Flags属性.

然后,

    [Flags] 
    public enum Status
    {
        S1 = 1,
        S2 = 2,
        S3 = 4,
        S4 = 8
    }
Run Code Online (Sandbox Code Playgroud)

您可以使用Enum.HasFlag检查特定状态是否处于活动状态:

public void DoWork(Status s) 
{
    var statusResult = Enum.GetValues(typeof(Status)).Where(v => s.HasFlag(v)).ToArray() ; 

    // StatusResult should now contains {1, 2}
} 
Run Code Online (Sandbox Code Playgroud)

  • 有一个`HasFlag`而不是使用`&`从.NET 4.0开始 (2认同)