c#generic Enum类操作

时间:2015-05-12 12:04:53

标签: c# generics enums

我正在尝试实现以下目标:使用一个方法来获取通用枚举并检查该枚举是否来自同一类中定义的枚举,并且具有另一个返回成功检查的int值的方法枚举。

以下是一个例子:

public class MyClass(){

    public enum MyValue{
        Value1,
        Value2,
        Value3,
    }

    public enum MyString{
        String1,
        String2,
        String3,
    }

    public void Usage(Enum something){
        if(IsRight(typeof(MyValue))){
            Console.WriteLine("something = " + GetInt(something));
        } else {
            Console.WriteLine("ERROR: something is not MyValue");
        }
        if(IsRight(typeof(MyString))){
            Console.WriteLine("something = " + GetInt(something));
        } else {
            Console.WriteLine("ERROR: something is not MyString");
        }
    }

    private bool IsRight(System.Type enumType){
        // THIS IS WRONG and I don't know how to do it...
        return enumType.IsAssignableFrom(MyClass);
    }

    private int GetInt(Enum enumeration){
        // is there a better way to do the int conversion?
        return (int)Convert.ChangeType(enumeration, typeof(int));
    }
}

实际上GetInt方法有效,但我想知道是否有更简单的方法。关于IsRight方法我没有关于如何做到这一点的线索。基本上问题是我需要检查传递的枚举值是否是同一个类中定义的任何枚举,方法是避免用户将传递给我一个类不知道的枚举。

非常感谢: - )

修改 我道歉,因为可能这个例子不是很好。我知道我可以使用is关键字列出所有枚举,但因为我的类中会定义很多枚举,所以该函数的一个更好的例子可能是:

public class MyClass(){

    public enum MyValue{
        Value1,
        Value2,
        Value3,
    }

    public enum MyString{
        String1,
        String2,
        String3,
    }

    private List<string> m_cachedStrings = new List<string>();

    public void Usage(Enum something){
        CacheStrings(typeof(MyValue));
        CacheStrings(typeof(MyString));
    }

    private bool CacheStrings(System.Type enumType){

        // THIS IS WRONG and I don't know how to do it...
        if(!enumType.IsAssignableFrom(MyClass))
            return;

        foreach(var item in Enum.GetValues(enumType)){
            m_cachedStrings.Add(item.ToString());
        }
    }
}

1 个答案:

答案 0 :(得分:2)

试试这个:

private bool IsRight(System.Type enumType){
    return enumType.DeclaringType == typeof(MyClass);
}