2015-05-12 179 views
0

我想實現以下目標:有一個方法,將獲得一個泛型枚舉,並檢查該枚舉是否從在相同的類中定義的枚舉和具有返回int的另一個方法成功檢查Enum的值。c#泛型枚舉類操作

下面是一個例子:

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方法,我沒有關於如何去做的線索。基本上問題是我需要檢查傳入的枚舉值是否是在同一個類中定義的任何枚舉值,方法是避免用戶傳遞給我一個類不知道的枚舉。

非常感謝你:-)

編輯 我很抱歉,因爲也許這個例子並不是很好。我知道我可以使用的關鍵字列出所有的枚舉,但因爲我有很多在我的類中定義枚舉的,該功能更好的例子是:

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()); 
     } 
    } 
} 

回答

2

試試這個:

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

這確實是我想要的!謝謝 :-) – Apache81