c# - 'OR' 标记枚举中所有值的最佳方法?

标签 c# enums

给定枚举:

[Flags]
public enum mytest
{
    a = 1,
    b = 2,
    c = 4
}

我想出了两种方法来表示单个变量中的所有值:

    var OR1 = (mytest)Enum.GetNames(typeof(mytest)).Sum(a => (int)Enum.Parse(typeof(mytest), a));
    var OR2 = (mytest)(typeof(mytest).GetEnumValues() as mytest[]).Sum(a => (int)a);

现在,虽然它们都有效,但有更简洁的方法吗?可能是我缺少的 .NET 方法?

编辑:为了澄清,我需要函数是动态的 - 我不想通过指定每个 enum 值来计算它。

最佳答案

如果有一个 All 成员有意义,直接提供它:

[Flags]
public enum mytest
{
    a = 1,
    b = 2,
    c = 4,
    All = 7
}

不过,更惯用的写法可能是:

[Flags]
public enum MyTest
{
    A = 1,
    B = 1 << 0x01,
    C = 1 << 0x02,
    All = A | B | C
}

这显示了枚举值的逻辑进展,并且在 All 的情况下,可以轻松添加另一个成员。

关于c# - 'OR' 标记枚举中所有值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298239/

相关文章:

c# - 如何使用C#从下面的字符串中提取键

c# - DAL "Typed DataSets"或自定义业务对象

java - 在 Java 中使用内部类 - 枚举

java - 如何在多个 Enum 中重用代码

ios - typedef 行 : 上的“预期标识符”错误

c# - 获取通用枚举的描述属性

c# - 将万无一失的 RequiredIf 与枚举一起使用

c# - 扩展方法是否类似于在 c# 中具有 "new"关键字方法?

c# - 在不导入 C# 数据源的情况下创建 SQL Server 连接字符串

c# - 责任链 - Servicer1 不调用 Servicer2