假设我们有以下Enum of Flags:

[Flags]
    public enum Animals
    {
        Cow = 1,

        Duck = 2,

        Goose = 4
    }


现在,给定该枚举,我们想指定一个带有int作为输入的函数,并给定这个数字,我们要返回一个包含该数字包含的动物的数组。

例如,如果我们收到数字7,那么我们知道我们有一头母牛,一头鸭子和一只鹅,因为4 + 2 + 1 = 7。

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

最佳答案

通用版本-不太快,可能会改进...

void Main()
{
    var flags = Ext.GetFlags<Animal>(7);
    flags.Dump();
}

public static class Ext
{
    public static IEnumerable<T> GetFlags<T>(int flags)
    where T : struct
    {
        return typeof(T).GetEnumValues().Cast<T>()
            .Where(a => ((dynamic)(T)(object)flags).HasFlag(a)).ToList();
    }
}

[Flags]
public enum Animal
{
    Cow =1,
    Duck = 2,
    Goose = 4,
    Dog = 8
}

关于c# - C#枚举-给出Int输入的猜测标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29917331/

10-12 21:32