如何在C#2.0中以最简单,最优化的方式从枚举值数组创建位标记组合。我实际上已经找到了解决方案,但是我对这里的复杂性不满意。

enum MyEnum
{
    Apple = 0,
    Apricot = 1,
    Breadfruit = 2,
    Banana = 4
}

private int ConvertToBitFlags(MyEnum[] flags)
{
    string strFlags = string.Empty;
    foreach (MyEnum f in flags)
    {
        strFlags += strFlags == string.Empty ?
            Enum.GetName(typeof(MyEnum), f) :
            "," + Enum.GetName(typeof(MyEnum), f);
    }
    return (int)Enum.Parse(typeof(MyEnum), strFlags);
}

最佳答案

int result = 0;
foreach (MyEnum f in flags)
{
    result |= f; // You might need to cast — (int)f.
}
return result;

OTOH,您应该使用FlagsAttribute来提高类型安全性:
[Flags]
enum MyEnum { ... }

private MyEnum ConvertToBitFlags(MyEnum[] flags)
{
    MyEnum result = 0;
    foreach (MyEnum f in flags)
    {
        result |= f;
    }
    return result;
}

更好的是,通过使用FlagsAttribute,您可以避免完全使用MyEnum[],从而使此方法变得多余。

关于c# - 将枚举值数组转换为位标记组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7616775/

10-13 03:45