如何在C#2.0中以最简单,最优化的方式从枚举值数组创建位标记组合。我实际上已经找到了解决方案,但是我对这里的复杂性不满意。
enum MyEnum
{
Apple = 0,
Apricot = 1,
Breadfruit = 2,
Banana = 4
}
private int ConvertToBitFlags(MyEnum[] flags)
{
string strFlags = string.Empty;
foreach (MyEnum f in flags)
{
strFlags += strFlags == string.Empty ?
Enum.GetName(typeof(MyEnum), f) :
"," + Enum.GetName(typeof(MyEnum), f);
}
return (int)Enum.Parse(typeof(MyEnum), strFlags);
}
最佳答案
int result = 0;
foreach (MyEnum f in flags)
{
result |= f; // You might need to cast — (int)f.
}
return result;
OTOH,您应该使用
FlagsAttribute
来提高类型安全性:[Flags]
enum MyEnum { ... }
private MyEnum ConvertToBitFlags(MyEnum[] flags)
{
MyEnum result = 0;
foreach (MyEnum f in flags)
{
result |= f;
}
return result;
}
更好的是,通过使用
FlagsAttribute
,您可以避免完全使用MyEnum[]
,从而使此方法变得多余。关于c# - 将枚举值数组转换为位标记组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7616775/