从我知道的动态类型创建枚举变量是枚举?

时间:2015-03-26 20:39:58

标签: c# dynamic types enums

我有一个System.Type type变量,我检查了type.IsEnum并返回了true

假设实际上这个type变量是Direction枚举,其中包含以下枚举:Left, Up, Down, Right但前面的代码只知道它是枚举。它可能是其他内容取决于type,但我们保证它是.IsEnum

的枚举

现在,我如何创建Direction代表的type类型的新变量?说,我希望它的值来自整数0,它应该代表Left

2 个答案:

答案 0 :(得分:0)

如果你想检查你得到的枚举是Direction类型,然后对它做一些事情,你可以在类型上使用IsAssignableFrom方法检查,如示例中所示下面:

enum Direction
{
    Left = 0,
    Up,
    Down,
    Right
}

public static void DoSomethingIfDirection(object item)
{
    if (item != null)
    {
        Type type = item.GetType();
        if (type.IsEnum && typeof(Direction).IsAssignableFrom(type))
        {
            // Do something
            Console.WriteLine((Direction)item);
        }
    }
}

public static void Main(params string[] args)
{
    DoSomethingIfDirection("Hello");
    DoSomethingIfDirection("Left");
    DoSomethingIfDirection(Direction.Left);
}

答案 1 :(得分:0)

Enum.ToObject(Type,object)解决了这个问题。

例如,在我确认typeSystem.Enum后,我可以(System.Enum)Enum.ToObject(type,0)

令人困惑的是,尽管名称为Enum.ToObject,但此方法将对象转换为枚举而不是枚举为对象。但也许名称是指这种方法的返回类型object