请考虑以下代码:
public enum Status
{
S1 = 1,
S2 = 2,
S3 = 3,
S4 = 4
}
我知道我可以使用|
oerator将多个枚举传递给方法:
public void DoWork(Status S)
{
}
...
DoWork(Status.S1 | Status.S2);
现在在DoWork方法中我想获取传递的枚举值。例如在上面的代码中,我想获得{1, 2}
。我怎么做这个?
感谢
答案 0 :(得分:5)
以下几个步骤可以获得标记的枚举:
2 exp (n)
整数(1,2,4,8,16,32,...)
定义你的枚举。 为什么?:实际上你的每个活跃状态
枚举将取一个32位整数的位。然后,
[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}
}
答案 1 :(得分:3)
使用params标记声明参数,然后得到一个枚举数组:
public void DoWork (params Status[] args) {
Console.WriteLine(args.Length);
}
然后你只需将它们作为常规参数传递:
DoWork(Status.S1, Status.S2);
这不需要更改您的枚举,并且可以轻松应对其他值。上面的标志解决方案也可能适合您 - 取决于您的要求。
答案 2 :(得分:0)
如果这是你想要的枚举的整数值,你可以使用它:
//declare your enum as byte
public enum Status : byte
{...}
**EDITED**
//then cast it to int to use the value
DoWork((int)Status.S1 , (int)Status.S2);
//change doWork to accept int[]
public void DoWork (params int[] args)