2012-07-18 160 views
1

这可能是一个基本问题,但我用它搜索并没有找到答案。我希望你能帮助我。考虑我有一个enumContactNumberType枚举类型参数不起作用

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

如果我使用上面,编译器为没有错误,但是当我写:

string[] names = Enum.GetNames(ContactNumberType) 

它说:

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

虽然ContactNumberType类型为Enum,据我所知,和GetNames需要EnumType,所以什么与该问题的方法的参数?

回答

7

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

传递一个类型作为参数,你有两个基本的选择:

  • 传递一个Type实例
  • 使用通用

其中第一项(其中有许多旧的方法,如Enum.GetNames()所做的那样)要求您从类型标识符中获取Type实例,我们可以使用typeof()运算符来实现该实例。

的这些第二允许传递类型名称作为参数传递给一个方法或类以使该方法或类通用的,往往在较新的方法中使用(泛型引入在.NET 2.0):

var items = someList.OfType<SomeTypeName>(); 

Enum,但是,不具有GetNames()一个通用的形式,允许这一点,虽然你可以创造这样一个:

public static class EnumHelper 
{ 
    public static string[] GetNames<T>() where T : struct 
    { 
     return Enum.GetNames(typeof(T)) 
    } 
} 

然后你可以调用诸如:

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

由于typeof运算符返回的Type

2

GetNames一个对象执行Type类型的参数。问题是ContactNumberType不是Type对象。当您使用typeof运算符时,它会返回适当的Type对象。