C# 铸造<;T>;()使用类型变量

C# 铸造<;T>;()使用类型变量,c#,linq,casting,enums,C#,Linq,Casting,Enums,我试图通过返回一个包含每个常量名称和值的列表来创建一个枚举任何枚举的方法 这是我的密码: Type enumType = typeof(SomeEnum); var enumConstants = Enum.GetValues(enumType). Cast<enumType>(). Select(x => new { Value = (int) x, Name = x.ToString() }); Type enumType=t

我试图通过返回一个包含每个常量名称和值的列表来创建一个枚举任何枚举的方法

这是我的密码:

Type enumType = typeof(SomeEnum);
var enumConstants = 
    Enum.GetValues(enumType).
         Cast<enumType>().
         Select(x => new { Value = (int) x, Name = x.ToString() });
Type enumType=typeof(SomeEnum);
变量枚举常量=
GetValues(枚举类型)。
Cast()。
选择(x=>new{Value=(int)x,Name=x.ToString()});
(我在这个片段中声明了
enumType
,但实际上它在我的方法签名中声明为
MyMethod(Type enumType)
。我没有显示我的方法签名,因为这需要引入我正在使用的某些结构,这与这里的问题无关)

问题是,此代码未编译,我正在执行
Cast()。
行中出现以下错误:

找不到类型或命名空间名称“enumType”(是否缺少using指令或程序集引用?)

我不明白
enumType
怎么可能是未知的,我只是在前一行声明了它

请注意,在
Enum.GetValues(enumType)。
行上没有标记错误

我是不是遗漏了什么?林克在耍把戏吗?

这应该是:

Type enumType = typeof(SomeEnum);
var enumConstants = 
    Enum.GetValues(enumType).
     Cast<SomeEnum>().
     Select(x => new { Value = (int) x, Name = x.ToString() });
Type enumType=typeof(SomeEnum);
变量枚举常量=
GetValues(枚举类型)。
Cast()。
选择(x=>new{Value=(int)x,Name=x.ToString()});

问题在于
Cast()
调用。泛型方法类型需要实际的类型规范(
SomeEnum
),而不是
System.type
enumType
)。

泛型不允许传递变量的实例,您需要使用
Cast()
,或者将此代码所在的方法设置为泛型,并使用类似于
Cast()的方法

尝试更改

Cast<enumType>()
Cast()

Cast()
试试这个:

    Type enumType = typeof(SqlDbType);
    var enumConstants =
        Enum.GetValues(enumType).
             Cast<Enum>().
             Select(x => new { Value = Convert.ToInt32(x), Name = x.ToString() });
Type enumType=typeof(SqlDbType);
变量枚举常数=
GetValues(枚举类型)。
Cast()。
选择(x=>new{Value=Convert.ToInt32(x),Name=x.ToString()});
string[]names=Enum.GetNames(typeof(MyEnum));
MyEnum[]值=(MyEnum[])Enum.GetValues(typeof(MyEnum));
int[]intValues=values.Cast().ToArray();
for(int i=0;i

或者以更简洁的方式:

var result = Enum.GetValues(typeof(MyEnum))
    .Cast<MyEnum>()
    .Select(x => new { Name = Enum.GetName(typeof(MyEnum), x), Value = (int)x });
var result=Enum.GetValues(typeof(MyEnum))
.Cast()
.Select(x=>new{Name=Enum.GetName(typeof(MyEnum),x),Value=(int)x});
这是我的

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() });
        }
    }
}
namespace SO.Enums
{
公共枚举SomeEnum
{
A.
B
C
D
}
班级计划
{
静态void Main(字符串[]参数)
{
类型enumType=typeof(SomeEnum);
变量枚举常数=
GetValues(枚举类型)。
Cast()。
选择(x=>new{Value=(int)x,Name=x.ToString()});
}
}
}

泛型类型参数必须是
T
,而不是
typeof(T)
。我不能设计
Cast
,因为我不知道方法中的
SomeEnum
。我的方法将像
GetEnumValues(typeof(SomeEnum))
一样被调用。不能这样做。我的方法的目的是不知道什么是枚举。我的方法将像
GetEnumValues(typeof(SomeEnum))
一样被调用。应该在问题中说得更清楚:)
var result = Enum.GetValues(typeof(MyEnum))
    .Cast<MyEnum>()
    .Select(x => new { Name = Enum.GetName(typeof(MyEnum), x), Value = (int)x });
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() });
        }
    }
}