我正在努力理解这里的迭代部分我将如何检查下面的{{ myArray[0]?.myProperty }}
变量是否具有所有的entity
条目变量Enum.Component
。如果我知道通过comps
只有一个组件和基本比较(例如.ForEach
),我可以相对直接地实现这一点,但如果我需要检查多个组件,则不能。
我试图更好地理解C#的细微差别,所以我不想用实际的entity.ForEach(comp => Console.WriteLine(comp.COMPONENT == Enum.Component.EXPERIENCE));
(在传统的foreach
类型中强制执行此操作)方式)或类似的东西,但我真的想了解如何通过这些foreach(var x in exes)
函数和使用lambda表达式通过这些对象实现它。因此,我需要一个利用这些东西的答案,除非这在技术上是不可能的,尽管可能是,我在猜测。
IEnumerable
答案 0 :(得分:2)
您可以通过Flags轻松完成此操作!
https://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110).aspx
首先使用你的枚举:
[Flags]
enum Component {
None = 0,
EXPERIENCE = 1 << 0,
HEALTH = 1 << 1,
All = (1 << 2) - 1
}
这基本上会将您的值存储为2的幂,其中包含&#39; All&#39;作为所有标志的总和,在这种情况下Exp和Hp是1和2,所以All是3(1 + 2)
现在您可以在实体类中执行此操作:
public Enum.Component Flags => comps.Select(c => c.Component).Distinct().Sum();
public bool HasAllFlags => Flags == Enum.Component.All;
我们将enum设为所有不同的基数2,所有下一步为-1,这意味着All是所有枚举列表的总和。
然后我们只是总结一下Enums(我们可能必须首先转换为int然后再转换回enum,我不记得你是否可以在C#中将Enums一起添加)并检查它们是否==组件。所有
你去吧!