这可能是一个基本问题,但我用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
是一种类型,但像变量一样使用.
虽然类型ContactNumberType
是Enum
,据我所知,和方法的参数GetNames
需要EnumType
,所以什么与该问题?
你必须使用,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)