枚举类型参数不起作用

时间:2012-07-18 20:54:50

标签: c# enums

这可能是一个基本问题,但我用Google搜索并没有找到答案。我希望你能帮助我。考虑我有一个enum ContactNumberType

string[] names = Enum.GetNames(typeof(ContactNumberType))

如果我使用上面的代码,编译器不会给出错误,但是在我写的时候:

string[] names = Enum.GetNames(ContactNumberType)

它说:

  

ContactNumberType是一种类型,但像变量一样使用。

虽然ContactNumberType的类型是Enum,据我所知,方法GetNames的参数需要EnumType,那么问题是什么?< / p>

3 个答案:

答案 0 :(得分:7)

您必须使用typeof,因为GetNames()方法采用类型为Type的参数。请记住,提供类型名称与Type的实例不同,Type是包含该类型详细信息的对象。

要将类型作为参数传递,您有两个基本选择:

  • 传递Enum.GetNames()实例
  • 使用通用

其中第一个(许多较旧的方法,例如Type)要求您从类型标识符中获取typeof()实例,我们可以使用var items = someList.OfType<SomeTypeName>(); 运算符。

其中第二个允许您将类型名称作为参数传递给方法或类,以使该方法或类通用,并倾向于在较新的方法上使用(泛型在.NET 2.0中引入):

Enum
然而,

GetNames()没有允许这种情况的public static class EnumHelper { public static string[] GetNames<T>() where T : struct { return Enum.GetNames(typeof(T)) } } 的通用形式,尽管你可以创建类似的东西:

string[] names = EnumHelper.GetNames<ContactNumberType>();

然后你可以这样称呼:

{{1}}

答案 1 :(得分:2)

GetNames采用Type类型的参数。问题是ContactNumberType不是Type对象。使用typeof运算符时,它会返回相应的Type对象。

答案 2 :(得分:0)

因为typeof运算符返回Type

的对象