有没有办法告诉我在运行时使用哪个确切的枚举?

时间:2014-11-18 09:57:02

标签: c# .net generics enums

我有两个枚举和一个通用方法。泛型类型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
        }
    }

编译器告诉我&#34;给定的表达式永远不是提供的类型&#34;关于if检查。 有没有办法告诉它在运行时的确切枚举?

3 个答案:

答案 0 :(得分:4)

你想:

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

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

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

答案 1 :(得分:1)

因为typeof会返回Type个实例并且永远不会与您的枚举类型兼容。因此is将始终返回false。相反,你需要

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

答案 2 :(得分:1)

你可以做到

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

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

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