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

标签 c# c#-4.0 enums

请考虑这段代码:

public enum Status
{
    S1 = 1,
    S2 = 2,
    S3 = 3,
    S4 = 4
}

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

public void DoWork(Status S)
{
}
...
DoWork(Status.S1 | Status.S2);

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

最佳答案

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

  1. 使用 2 exp (n) 整数(1, 2, 4, 8, 16, 32, ...) 定义你的枚举。 Why ? :实际上你的每一个活跃状态 枚举将采用 32 位整数中的一位。
  2. 添加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/

相关文章:

swift - 在 Swift 的 bool 赋值中使用 `if-case` 格式?

c# - 如何在 Outlook 2007 VSTO 上嵌入图像

c# - 使用 TCP 套接字在本地代理视频

C# MySQL LINQ 日期时间转换

c# - 前缀 "On"在 C# 编码中的事件案例中实现了什么?

unit-testing - 如何有效地对使用 ADO.NET 和 SQL Server 和 NUnit 的 DAL 进行单元测试?

swift - 我们可以在 SWIFT 中使用关键字作为参数名称吗?

java - 如何替换命令模式的静态元素初始化?

c# - 在数据表中查找重复项然后比较重复项

c#-4.0 - 如何使用C#.net解码amr文件