Я пытаюсь достичь следующих целей: иметь метод, который получит общий 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());
}
}
}
Это действительно то, что я хотел !!!! Спасибо :-) – Apache81