请考虑以下代码:
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}.我怎么做这个?谢谢
以下是获取标记枚举的几个步骤:
2 exp (n)整数(1,2,4,8,16,32,...)来定义枚举.为什么?:实际上,枚举的每个活动状态都将取一个32位整数的位.然后,
[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)
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |