我敢肯定,必须有一个更好的方法。我正在尝试对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;
}
该代码非常有效,因为它仅对每个位进行一次迭代,而不是像其他示例中那样对每个可能的位进行迭代。