我需要获取枚举的值,所以我使用以下命令:
Array a = Enum.GetValues(typeof(Typ));
然而,典型的表达方式 斧头] 不起作用,为什么?
由于
答案 0 :(得分:4)
好吧,因为Enum.GetValues
不是通用的。
如果你写:
var a = Enum.GetValues(typeof(Typ));
Console.WriteLine(a.GetType());
你会得到:“Namespace.Typ []”。但由于方法不是通用的,编译器不能根据提供的类型更改返回类型,因此该方法返回System.Array
,它是数组的基类型,您必须使用类型转换将其向下转换为预期类型,例如:
Typ[] a = (Typ[])Enum.GetValues(typeof(Typ));
答案 1 :(得分:2)
我认为这样做的正确方法是:
Array a = Enum.GetValues(typeof(Typ));
然后通过以下方式检索位置处的元素:
a.GetValue(elementsIndex);
答案 2 :(得分:0)
我在转换DB SP参数的自定义类时使用以下代码来处理emums,它始终有效。
public static object ParamValue<T>(Enum value)
{
if (value == null)
return System.DBNull.Value;
else
return (T)Enum.Parse(value.GetType(), value.ToString());
}
答案 3 :(得分:-1)
根据OP的评论,他可能实际上并不感兴趣Enum
的值,而是名称。这种区别很容易让初学者感到困惑。 提示:当您提出涉及错误的问题时(例如“不起作用,为什么?”),那么包含错误消息通常会有所帮助。
如果您要在Enum
中查找姓名,请尝试:
string[] names = Enum.GetNames(typeof(Typ));