请考虑这段代码:
public enum Status
{
S1 = 1,
S2 = 2,
S3 = 3,
S4 = 4
}
我知道我可以使用 |
运算符将多个枚举传递给一个方法:
public void DoWork(Status S)
{
}
...
DoWork(Status.S1 | Status.S2);
现在在 DoWork 方法中,我想获取传递的枚举的值。例如在上面的代码中我想得到 {1, 2}
。我如何做到这一点?
谢谢
最佳答案
以下是获得标记枚举的几个步骤:
- 使用
2 exp (n)
整数(1, 2, 4, 8, 16, 32, ...) 定义你的枚举。 Why ? :实际上你的每一个活跃状态 枚举将采用 32 位整数中的一位。 - 添加Flags属性。
然后,
[Flags]
public enum Status
{
S1 = 1,
S2 = 2,
S3 = 4,
S4 = 8
}
您可以使用 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}
}
关于c# - 将多个枚举传递给方法并获取它们的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738918/