Answers:
您可以使用静态方法Enum.GetNames
,该方法返回一个表示枚举中所有项目名称的数组。此数组的length属性等于枚举中定义的项目数
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
问题是:
如何获得枚举中定义的项目数?
“项目”的数量实际上可能意味着两个完全不同的事物。考虑以下示例。
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
中定义的“项目”数量是多少MyEnum
?
项目数是5吗?(A
,B
,C
,D
,E
)
还是3?(1
,2
,3
)
(5)中定义的名称数量MyEnum
可以如下计算。
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
(3)中定义的值的数量MyEnum
可以如下计算。
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
。
Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;)。
我在C答案中看到的一个巧妙技巧,只需在枚举中添加最后一个元素,然后使用它来告诉枚举中有多少个元素:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
如果您定义的起始值不是0,则可以使用NumberOfTypes-Type1来确定元素数。
我不确定此方法是否会比使用Enum更快,并且我也不确定是否将其视为执行此操作的正确方法,因为我们有Enum可以为我们确定此信息。
我刚才正在研究这个问题,对当前解决方案的可读性不满意。如果您是非正式地编写代码或在一个小型项目上编写代码,则可以在枚举的末尾添加另一个名为“长度”的项目。这样,您只需要键入:
var namesCount = (int)MyEnum.Length;
当然,如果其他人要使用您的代码-或者我确定在这种情况下不适用于我的许多其他情况-这种解决方案可能是不明智的,甚至是糟糕的。