枚举类型参数不起作用

Raf*_*Mir 1 c# enums

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

string[] names = Enum.GetNames(typeof(ContactNumberType))
Run Code Online (Sandbox Code Playgroud)

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

string[] names = Enum.GetNames(ContactNumberType)
Run Code Online (Sandbox Code Playgroud)

它说:

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

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

Jam*_*are 7

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

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

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

第一个(许多较旧的方法,例如Enum.GetNames())会要求您Type从类型标识符中获取实例,我们可以使用typeof()运算符来完成.

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

var items = someList.OfType<SomeTypeName>();
Run Code Online (Sandbox Code Playgroud)

Enum但是,没有GetNames()允许这样的通用形式,尽管你可以创建一个类似的东西:

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

然后你可以这样称呼:

string[] names = EnumHelper.GetNames<ContactNumberType>();
Run Code Online (Sandbox Code Playgroud)