我敢肯定,必须有一个更好的方法。我正在尝试对Flags枚举进行计数操作。在我提出所有可能的值并计算成功的AND运算之前。

例如

[Flags]
public enum Skills
{
    None = 0,
    Skill1 = 1,
    Skill2 = 2,
    Skill3 = 4,
    Skill4 = 8,
    Skill5 = 16,
    Skill6 = 32,
    Skill7 = 64,
    Skill8 = 128
}

public static int Count(Skills skillsToCount)
{
   Skills skill;
   for (int i = 0; i < SkillSet.AllSkills.Count; i++)
   {
      skill = SkillSet.AllSkills[i];
      if ((skillsToCount & skill) == skill && skill != Skills.None)
         count++;
   }
   return count;
}

我敢肯定,尽管这样做必须有更好的方法,但一定会遇到精神障碍。谁能建议一个更好的解决方案?

最佳答案

以下代码将为给定数量的任何类型的给定数量设置的位数,其大小从字节到长到不等。

public static int GetSetBitCount(long lValue)
{
  int iCount = 0;

  //Loop the value while there are still bits
  while (lValue != 0)
  {
    //Remove the end bit
    lValue = lValue & (lValue - 1);

    //Increment the count
    iCount++;
  }

  //Return the count
  return iCount;
}

该代码非常有效,因为它仅对每个位进行一次迭代,而不是像其他示例中那样对每个可能的位进行迭代。

09-10 03:31