【问题标题】:Creating Enum variable from a dynamic type that I know is an Enum?从我知道是枚举的动态类型创建枚举变量?
【发布时间】:2015-03-26 20:39:57
【问题描述】:

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

假设实际上这个type变量是Direction枚举,它有这些枚举:Left, Up, Down, Right但前面的代码只知道它是一个枚举。它可能取决于type,但我们保证它是.IsEnum 的枚举

现在,我怎样才能创建一个 Direction 类型的新变量,这个 type 代表?比如说,我希望它的值来自整数 0,它应该代表 Left

【问题讨论】:

  • Enum.ToObject 能否满足您的需求?
  • 哦,成功了。我认为方法名称有些误导,因为此方法将对象转换为所需的枚举...谢谢!
  • 很高兴我能帮上忙。请记得为您认为有用的 cmets 投一票。

标签: c# dynamic types enums


【解决方案1】:

如果你想检查你得到的枚举是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);
}

【讨论】:

  • 谢谢,Direction 只是一个例子。在实际应用中,我希望它可以与 type 变量携带的任何 Enum 类型一起使用。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2012-09-16
    • 2018-10-18
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多