解码Bitwise枚举获得原始值

时间:2014-06-05 14:25:45

标签: c#

我有一个这样的枚举:

public enum ChoixAbonnements 
    {
        Dirigeant = 1,
        InterlocuteurGestion = 2,
        Comptabilite = 4,
        InterlocuteurSyndic = 8,
        InterlocuteurInformatiqueInterne = 16,
        InterlocuteurInformatiqueLocationVacances = 32,

    }

我必须对其进行解码并获取这些复选框的值:

protected void CheckboxBinding() 
    {
        var dict = new Dictionary<ChoixAbonnements, CheckBox>()  
        { 
            { ChoixAbonnements.Dirigeant, this.CheckBox_Dirigeant},
            { ChoixAbonnements.InterlocuteurGestion, this.CheckBox_Interlocuteur_Gestion},
            { ChoixAbonnements.Comptabilite, this.CheckBox_Comptabilite},
            { ChoixAbonnements.InterlocuteurSyndic, this.CheckBox_Interlocuteur_Syndic},
            { ChoixAbonnements.InterlocuteurInformatiqueInterne, this.Checkbox_Interlocuteur_Informatique_Interne},
            { ChoixAbonnements.InterlocuteurInformatiqueLocationVacances, this.CheckBox_Interlocuteur_LocationVacances}
        }; 

有人有想法吗?

3 个答案:

答案 0 :(得分:2)

你想获得一个掩码,表明已经检查了哪些枚举值?如果是这样,你需要这样的东西:

var mask = default(ChoixAbonnements);

foreach (var e in dict.Keys) {
    if (dict[e].Checked == true)
        mask |= c;
}

如果你想反过来,即填充掩码中的复选框,请执行以下操作:

var mask = ...;

foreach (var e in dict.Keys) {
    dict[e].Checked = ((mask & e) == e);
}

答案 1 :(得分:0)

给定ChoixAbonnements类型的值(让我们称之为myVal),您可以像这样测试每个组件:

var isDirigeant = (myVal & ChoixAbonnements.Dirigeant) == ChoixAbonnements.Dirigeant;

所以你可以这样做:

isDirigeantCheckBox.IsChecked = (myVal & ChoixAbonnements.Dirigeant) == ChoixAbonnements.Dirigeant;

答案 2 :(得分:-1)

你有没有尝试过(int)ChoixAbonnements.Dirigeant?