【问题标题】:Is there a way to tell which exact enum I'm working with at run-time?有没有办法告诉我在运行时正在使用哪个确切的枚举?
【发布时间】:2014-11-18 09:57:01
【问题描述】:

我有两个枚举和一个通用方法。泛型类型 T 可以是枚举之一。

    public enum myEnumA
    {
        a,
        b
    }

    public enum myEnumB
    {
        c,
        d
    }

    public void myMethod<T>()
    {
        if (typeof(T) is myEnumA)
        {
            //do something
        } 
        else if (typeof (T) is myEnumB)
        {
            //do something else
        }
    }

关于 if 检查,编译器告诉我“给定的表达式永远不是提供的类型”。 有没有办法在运行时判断它是哪个确切的枚举?

【问题讨论】:

标签: c# .net generics enums


【解决方案1】:

你想要:

if (typeof(T) == typeof(MyEnumA))

比较类型。 is 运算符用于测试 value 是否属于特定类型。

请注意,必须在泛型方法中测试特定类型意味着它可能毕竟不是非常泛型 - 考虑使用重载或完全独立的方法。

【讨论】:

  • 谢谢!有时我需要刷新基础知识:)
【解决方案2】:

因为typeof 返回一个Type 实例,它永远不会与您的枚举类型兼容。所以is 将始终返回错误。相反,您需要

if (typeof(T) == typeof(myEnumA))

【讨论】:

    【解决方案3】:

    你可以的

    if (typeof(T) == typeof(myEnumA))
    

    您的类型是枚举,它们是密封的。如果您的类型没有密封,您可能需要使用 IsAssignableFrom 方法来检查子类化,例如:

    if (typeof(BaseTypeA).IsAssignableFrom(typeof(T))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2012-02-20
      • 1970-01-01
      • 2011-07-08
      • 2019-11-19
      相关资源
      最近更新 更多