我正在尝试通过返回包含每个常量名称和值的列表来创建枚举任何 enum 的方法。
这是我的代码:
Type enumType = typeof(SomeEnum);
var enumConstants =
Enum.GetValues(enumType).
Cast<enumType>().
Select(x => new { Value = (int) x, Name = x.ToString() });
(我在此代码段中声明enumType
但实际上我的方法签名中声明为MyMethod(Type enumType)
。我没有显示我的方法签名,因为这需要引入一些 struct 我正在使用,这与此处的问题无关)
问题是这段代码无法编译,我在Cast<enumType>().
行上遇到以下错误:
找不到类型或命名空间名称'enumType'(您是否缺少using指令或程序集引用?)
我不明白enumType
怎么可能不知道,我刚刚在前一行宣布过它!
请注意,在Enum.GetValues(enumType).
行上,没有标记错误。
我在这里遗漏了什么吗?一些LINQ玩弄技巧吗?
答案 0 :(得分:5)
这应该是:
Type enumType = typeof(SomeEnum);
var enumConstants =
Enum.GetValues(enumType).
Cast<SomeEnum>().
Select(x => new { Value = (int) x, Name = x.ToString() });
问题是Cast<T>()
电话。泛型方法类型需要实际的类型规范(SomeEnum
),而不是System.Type
(enumType
)。
答案 1 :(得分:5)
泛型不允许您传递变量的实例,您需要使用Cast<SomeEnum>()
,或者使用此代码所属的方法,并使用类似Cast<T>()
的内容。
答案 2 :(得分:2)
试试这个:
Type enumType = typeof(SqlDbType);
var enumConstants =
Enum.GetValues(enumType).
Cast<Enum>().
Select(x => new { Value = Convert.ToInt32(x), Name = x.ToString() });
答案 3 :(得分:1)
尝试更改
Cast<enumType>()
到
Cast<SomeEnum>()
答案 4 :(得分:1)
这是我所拥有的
namespace SO.Enums
{
public enum SomeEnum
{
A,
B,
C,
D
}
class Program
{
static void Main(string[] args)
{
Type enumType = typeof(SomeEnum);
var enumConstants =
Enum.GetValues(enumType).
Cast<SomeEnum>().
Select(x => new { Value = (int)x, Name = x.ToString() });
}
}
}
答案 5 :(得分:0)
string[] names = Enum.GetNames(typeof(MyEnum));
MyEnum[] values = (MyEnum[])Enum.GetValues(typeof(MyEnum));
int[] intValues = values.Cast<int>().ToArray();
for (int i = 0; i < names.Length; i++) {
Console.WriteLine("{0} = {1}", names[i], intValues[i]);
}
或者以更简洁的方式:
var result = Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.Select(x => new { Name = Enum.GetName(typeof(MyEnum), x), Value = (int)x });