从位掩码返回一组对象

Mex*_*Dev 3 c#

我"需要"一种更好的方法来从位掩码生成一个对象集合(一个ushort传递,在二进制形式上它被解释为一个掩码)

简单,非优雅的解决方案是:

public static Things[] Decode(ushort mask)  
{  
    switch (mask)  
    {  
        case 1: // 1  
            return new[] { new Thing(0) };    
        case 2: //10  
            return new[] { new Thing(1) };  
        case 3: // 11  
            return new[] { new Thing(1), new Thing(0) };  
        case 4: // 100  
            return new[] { new Thing(2) };   
        case 5: // 101  
            return new[] { new Thing(2), new Thing(0) };  
Run Code Online (Sandbox Code Playgroud)

// so on ......

Jar*_*Par 6

请尝试以下方法

public static List<Thing> Decode(ushort mask) { 
  var list = new List<Thing>();
  for ( var index = 0;  index < 16; index++ ) {
    var bit = 1 << index;
    if ( 0 != (bit & mask) ) { 
      list.Add(new Thing(index));
    }
  }  
  return list;
}
Run Code Online (Sandbox Code Playgroud)