使用linq / lambda构建一个标志

时间:2014-12-12 11:00:38

标签: c# linq lambda bitmask

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

class MyClass
{
    public int Flag{get;set;}
    public bool IsSelected {get;set;}
}

myVar = GetlistMyClass();

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

你的意思是有点旗帜,就像两个力量一样吗?

像这样:

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();