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() });
}
}
}