有没有办法在不知道确切的枚举类型的情况下相互添加标志枚举?

问题描述 投票:0回答:1

我正在寻找一种在 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 的操作

网上查了一下,没有找到。

c# enums flags
1个回答
0
投票

当然,这叫做按位或运算,或者

|
:

    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
代码。

© www.soinside.com 2019 - 2024. All rights reserved.