使用 linq / lambda 构建一个位标志

本文关键字:一个 标志 linq lambda 构建 使用 | 更新日期: 2023-09-27 18:34:11

是否可以根据linq查询的结果构建位掩码;例如:

class MyClass
{
    public int Flag{get;set;}
    public bool IsSelected {get;set;}
}
myVar = GetlistMyClass();
int myFlag = myVar.Where(a => a.IsSelected).Select(?);

使用 linq / lambda 构建一个位标志

您可以使用 |-运算符聚合所有标志,如下所示:

int myFlag = myVar.Where(a => a.IsSelected)
                  .Select(x => x.Flag) 
                  .Aggregate((current, next) => current | next);

你的意思是像 2 的幂一样有点标志吗?

喜欢这个:

Func<int, int> pow2 = null;
pow2 = n => n == 0 ? 1 : 2 * pow2(n - 1);
int myFlag = myVar.Reverse().Select((a, n) => a.IsSelected ? pow2(n) : 0).Sum();

或者你的意思很简单:

int myFlag = myVar.Where(a => a.IsSelected).Any();