有没有办法知道我在运行时正在使用哪个确切的枚举

本文关键字:枚举 运行时 有没有 | 更新日期: 2023-09-27 18:30:51

我有两个枚举和一个泛型方法。泛型类型 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 检查。有没有办法在运行时判断它是哪个确切的枚举?

有没有办法知道我在运行时正在使用哪个确切的枚举

你需要:

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

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

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

因为typeof返回一个Type实例,并且永远不会与您的枚举类型兼容。所以is总是返回假的。相反,您需要

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

你可以做

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

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

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