2015-05-12 4 views
0

Я пытаюсь достичь следующих целей: иметь метод, который получит общий Enum и проверить, является ли это перечисление из перечислений, определенных в одном классе, и имеет другой метод, возвращающий int значение успешно проверенного Enum.C# generic Операции класса enum

Вот пример:

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 я не знаю, как это сделать. в основном проблема заключается в том, что мне нужно проверить, будет ли переданное значение перечисления быть из любого из перечислений, определенных в одном классе, поэтому метод должен избегать того, чтобы пользователь передал мне перечисление, которое класс не знает.

Большое спасибо :-)

EDIT Я извиняюсь, потому что, может быть, например, не очень хорошо. Я знаю, что я мог бы перечислить все Enum, используя это ключевое слово, а потому, что у меня будет много Enum, определенные в моем классе, гораздо лучше, например, для этой функции может быть:

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

Смежные вопросы