c# - 检查是否仅在枚举中设置了这些标志

标签 c# bitwise-operators flags

我已经创建了一个这样的扩展方法..

public static bool AllFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
    bool allSet = true;
    int enumVal = input.ToInt32(null);

    foreach (T itm in values)
    {
        int val = itm.ToInt32(null);
        if (!((enumVal & val) == val)) 
        {
            allSet = false;
            break;
        }
    }

    return allSet;
}

这非常适合我需要的目的,但是我现在需要创建一个具有相同签名的方法来检查是否只设置了这些值。

基本上是这样的。

public static bool OnlyTheseFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
}

我能想到的唯一方法是获取所有可用的枚举值,检查哪些已设置,并确认只有提供的两个已设置。

是否有另一种方法可以使用某种按位运算来解决这个问题?

最佳答案

对所有必需的标志执行“或”操作并与输入进行比较 - 应该相等。类似于以下,使用正确的循环来计算左侧的值:

var onlyTheseFlagsSet = (value[0] | value[1]) == input;

关于c# - 检查是否仅在枚举中设置了这些标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446882/

相关文章:

Java 以 C# 中的样式初始化类

c# - iTextSharp 文本字段将字体设置为粗体

python - 根据 python 中的给定条件最小化 n 的最快方法

c# - 如何在控制台中更改前景色和背景文字颜色?

c# - 如何从 AD DirectoryEntry 获取 DOMAIN\USER?

c - 位操作困难

java - Android:在 View.setSystemUiVisibility(int) 中读取按位运算符 OR

c++ - 在 C++ 中使用有符号变量和无符号变量作为标志

c# - 如何检查是否设置了标志组合的任何标志?

database - MongoDB 无法识别的选项 --install