2014-12-12 23 views
5

Bir linq sorgusunun sonucuna göre bir bit maskesi oluşturmak mümkün mü? örneğin:Linq/lambda kullanarak bir bit bayrağı oluşturma

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

myVar = GetlistMyClass(); 

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

cevap

5

Sen kullanarak tüm bayraklar araya getirebilmesini | böyle -Operatör:

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

Eğer ikisinin bir güç olarak biraz bayrağını yani? Bunun gibi

:

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

Ya yo sadece bu demek:

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