【发布时间】:2009-03-24 12:41:12
【问题描述】:
我确信一定有更好的方法来做到这一点。我正在尝试对 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;
}
我确信一定有更好的方法可以做到这一点,但一定是精神障碍。谁能提出更好的解决方案?
【问题讨论】:
-
您是否想弄清楚技能枚举本身中的标志总数是否会更清楚?或应用于“技能”的技能枚举值的数量?
-
我绝对看错了。看起来他正在尝试计算打开的位数,而不是枚举中的项目数。我删除了我的帖子。
-
抱歉不清楚。事实上,我正在尝试计算传递给 Count 方法的活动技能的数量。将稍微编辑问题以使其更清晰。
-
@Ian:我编辑了帖子标题以使其更清晰。如果您认为这不能准确反映您想要的结果,请随意回滚。
-
从 .NET Core 3.0 开始可以使用 BitOperations.PopCount:docs.microsoft.com/en-us/dotnet/api/…