c# generic Enum class 操作
c# generic Enum class operations
我正在努力实现以下目标:有一个方法可以获取通用枚举并检查该枚举是否来自同一 class 中定义的枚举,并有另一个方法返回成功检查的 Enum 的 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 方法,我不知道如何去做。基本上问题是我需要检查传递的枚举值是否属于同一 class 中定义的任何枚举,该方法是为了避免用户向我传递 class 的枚举不知道。
非常感谢:-)
编辑
我很抱歉,因为这个例子可能不是很好。我知道我可以使用 is 关键字列出所有枚举,但因为我将在我的 class 中定义很多枚举,该函数的一个更好的示例可能是:
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());
}
}
}
试试这个:
private bool IsRight(System.Type enumType){
return enumType.DeclaringType == typeof(MyClass);
}
我正在努力实现以下目标:有一个方法可以获取通用枚举并检查该枚举是否来自同一 class 中定义的枚举,并有另一个方法返回成功检查的 Enum 的 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 方法,我不知道如何去做。基本上问题是我需要检查传递的枚举值是否属于同一 class 中定义的任何枚举,该方法是为了避免用户向我传递 class 的枚举不知道。
非常感谢:-)
编辑 我很抱歉,因为这个例子可能不是很好。我知道我可以使用 is 关键字列出所有枚举,但因为我将在我的 class 中定义很多枚举,该函数的一个更好的示例可能是:
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());
}
}
}
试试这个:
private bool IsRight(System.Type enumType){
return enumType.DeclaringType == typeof(MyClass);
}