如何使用枚举获取多个值?

时间:2014-09-05 11:47:15

标签: enums enum-flags

我不知道正确的方法是什么。但这就是我想要的。 我有一个Enum

安勤{A = 1,B = 2,C = 4,d = 8,E = 16,}

我需要将数据库中的int值称为数字,

如果选择A,c,E

需要在数据库中说1 = 4 = 16 = 21。

哪个好,但是 然后从21我如何检索a,c,e

提前感谢您的帮助

2 个答案:

答案 0 :(得分:0)

你可以这样做(伪代码,因为你没说出你正在使用的语言):

function getEnums(value:string):enum[]
{
    var result = new enum[];
    foreach (var e in Enum.getValues(enum).orderBy(val.toInt()))
    {
        if (value == 0)
            break;

        var eVal = e.toInt();
        if (value >= eVal)
        {
            result.add(e);
            value -= eVal;
        }        
    }
    return result;
}

答案 1 :(得分:0)

看起来您的枚举值可以用2的幂表示。

e.g。 2^0 = 1, 2^1 = 2 ..等等。

所以你的问题归结为:将十进制转换为bianry。

如果你把简单的逻辑放在那里,你可以得到各自的枚举。

e.g. For input 21, you could get 1, 4, 16 ( = 2 power 0, 2, 4) 

现在您可以将它们映射到ENUM。