使用Type变量强制转换<T>()

Oti*_*iel 9 c# linq enums casting

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

这是我的代码:

Type enumType = typeof(SomeEnum);
var enumConstants = 
    Enum.GetValues(enumType).
         Cast<enumType>().
         Select(x => new { Value = (int) x, Name = x.ToString() });
Run Code Online (Sandbox Code Playgroud)

(我enumType在这个片段中声明,但它实际上是在我的方法签名中声明的MyMethod(Type enumType).我没有显示我的方法签名,因为这需要引入我正在使用的一些结构,这与此处的问题无关)

问题是这段代码没有编译,我遇到Cast<enumType>().了以下错误:

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

我不明白怎么可能enumType不知道,我只是在前一行宣布它!

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

我在这里错过了什么吗?一些LINQ玩弄技巧吗?

Ree*_*sey 5

这应该是:

Type enumType = typeof(SomeEnum);
var enumConstants = 
    Enum.GetValues(enumType).
     Cast<SomeEnum>().
     Select(x => new { Value = (int) x, Name = x.ToString() });
Run Code Online (Sandbox Code Playgroud)

问题是Cast<T>()电话.泛型方法类型需要实际的类型说明(SomeEnum),而不是System.Type(enumType).

  • 我不能通过设计来做'Cast <SomeEnum>`,因为我在我的方法中不知道`SomeEnum`.我的方法将被称为`GetEnumValues(typeof(SomeEnum))`. (2认同)

wsa*_*lle 5

泛型不允许您传递变量的实例,您需要使用Cast<SomeEnum>(),或者使用此代码所属的方法,并使用类似的东西Cast<T>().