我正在寻找一种在 C# 中做这样的事情的方法:
// giving eTankComponents is an [Flags] enum
[Flags]
public enum eTankComponents
{
Empty = 0,
Barrel = 1,
wheels = 2,
}
Type enumType = Type.GetType("eTankComponents");
object emptyTank = Enum.Parse(enumType, "Empty");
object tankWithBarrel = Enum.AddFlag(emptyTank, enumType, Enum.Parse(enumType, "Barrel"));
object fullTank = Enum.AddFlag(tankWithBarrel, enumType, Enum.Parse(enumType, "wheels"));`
c# 中是否有任何方法可以执行类似 Enum.AddFlag 的操作
网上查了一下,没有找到。
当然,这叫做按位或运算,或者
|
:
var emptyTank = (eTankComponents)Enum.Parse(enumType, "Empty");
Console.WriteLine(emptyTank); // Empty
var tankWithBarrel = emptyTank | (eTankComponents)Enum.Parse(enumType, "Barrel");
Console.WriteLine(tankWithBarrel); // Barrel
var fullTank = tankWithBarrel | (eTankComponents)Enum.Parse(enumType, "wheels");
Console.WriteLine(fullTank); // Barrel, Wheels
有很多方法可以编写上面的内容,从反射转换为适当的类型(如我的示例),到反射转换为
int
(如果您静态地不知道枚举类型),甚至到 dynamic
代码。