1

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

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

如果我使用上面的,编译器不会出错,但是当我写:

string[] names = Enum.GetNames(ContactNumberType)

它说:

ContactNumberType是一种类型,但用作变量。

虽然ContactNumberTypeis的类型Enum,据我所知,方法的参数GetNames需要EnumType,那有什么问题呢?

4

3 回答 3

7

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

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

  • 传递一个Type实例
  • 使用泛型

其中第一个(许多较旧的方法,例如Enum.GetNames()dos)要求您从类型标识符中获取一个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>();
于 2012-07-18T20:56:52.133 回答
2

GetNames接受一个类型的参数Type。问题是那ContactNumberType不是一个Type对象。当您使用typeof运算符时,它会返回相应的Type对象。

于 2012-07-18T20:57:32.360 回答
0

因为typeof运算符返回一个对象Type

于 2012-07-18T20:57:06.570 回答