C#Enum - 给出int输入的猜测标志

Hal*_*han 2 c# enums flags

假设我们有以下Enum of Flags:

[Flags]
    public enum Animals
    {
        Cow = 1,

        Duck = 2,

        Goose = 4
    }
Run Code Online (Sandbox Code Playgroud)

现在,给定此枚举,我们想要指定一个以int作为输入的函数,并且给定此数字,我们想要返回一个包含此数字包含的动物的数组.

例如,如果我们收到数字7作为输入,我们知道我们有一只牛,一只鸭子和一只鹅,因为4 + 2 + 1 = 7.

对于此枚举中出现的任何数量的动物,我们如何确定该数字中包含哪些动物?

dca*_*tro 6

public static IEnumerable<Animals> GetAnimals(int i)
{
    var animals = (Animals) i;

    foreach (Enum value in Enum.GetValues(animals.GetType()))
        if (animals.HasFlag(value))
            yield return (Animals) value;
}
Run Code Online (Sandbox Code Playgroud)

小提琴:https://dotnetfiddle.net/yydUE2

  • @ZoharPeled对,因为8是二进制的1000.由于3个最高有效位为0,因此它不包含任何标志.我会说这是预期的行为. (4认同)