C#将二进制或项一起列出到一个位掩码结果中

kmc*_*mee 3 c# linq enums

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

例如,修饰符键枚举被视为带有Flags属性的位字段,如下所示:

[Flags]
public enum ModifierKeys : uint
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用for循环并按位或将这些值作为uint一起执行此操作,然后将其转换回枚举类型。我当前的工作方法如下所示:

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

   return (ModifierKeys)value;
}
Run Code Online (Sandbox Code Playgroud)

我的问题-我可以用一个LINQ查询还是我缺少的其他扩展名来完成此操作?

Xel*_*ela 5

尝试这个:

uint value = keys.Aggregate<ModifierKeys, uint>(0, (current, item) => current | (uint)item);
Run Code Online (Sandbox Code Playgroud)