C#将二进制或项目一起列入一个位掩码结果

时间:2015-04-08 22:13:14

标签: c# linq enums

我在列表中的c#中有一个位标志列表。我想将二进制或它们一起生成一个位掩码。

例如,modifierKey枚举被视为具有Flags属性的位字段,如下所示:

[Flags]
public enum ModifierKeys : uint
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}

我知道我可以使用for循环,只是按位或将值一起作为uint,然后转换回枚举类型。我目前的工作方法如下:

public ModifierKeys ComputeMask(List<ModifierKeys> keys)
{
   uint value = 0;
   foreach(var item in keys)
   {
       value |= (uint)item;
   }

   return (ModifierKeys)value;
}

对于我的问题 - 我可以使用单个LINQ查询或我遗漏的其他扩展程序来完成此操作吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

uint value = keys.Aggregate<ModifierKeys, uint>(0, (current, item) => current | (uint)item);