如果这是一个愚蠢的问题或者只是一个无聊的问题,我会向前道歉.此外,我将通过实际找到答案来证明这一点.我对复杂性不满意(因为这很无聊:))
题:
如何在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);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*tos 11
int result = 0;
foreach (MyEnum f in flags)
{
result |= f; // You might need to cast — (int)f.
}
return result;
Run Code Online (Sandbox Code Playgroud)
OTOH,你应该使用FlagsAttribute改进的类型安全:
[Flags]
enum MyEnum { ... }
private MyEnum ConvertToBitFlags(MyEnum[] flags)
{
MyEnum result = 0;
foreach (MyEnum f in flags)
{
result |= f;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
更好的是,通过使用FlagsAttribute你可以避免MyEnum[]完全使用,从而使这种方法多余.
| 归档时间: |
|
| 查看次数: |
3647 次 |
| 最近记录: |