这可能是一个基本问题,但我用Google搜索并没有找到答案。我希望你能帮助我。考虑我有一个enum
ContactNumberType
:
string[] names = Enum.GetNames(typeof(ContactNumberType))
如果我使用上面的代码,编译器不会给出错误,但是在我写的时候:
string[] names = Enum.GetNames(ContactNumberType)
它说:
ContactNumberType
是一种类型,但像变量一样使用。
虽然ContactNumberType
的类型是Enum
,据我所知,方法GetNames
的参数需要EnumType
,那么问题是什么?< / p>
答案 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