枚举中定义的项目总数

时间:2009-05-13 05:06:36

标签: c# .net enums

如何获取枚举中定义的项目数?

10 个答案:

答案 0 :(得分:376)

您可以使用静态方法Enum.GetNames,它返回一个数组,表示枚举中所有项的名称。此数组的length属性等于枚举

中定义的项数
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;

答案 1 :(得分:162)

问题是:

  

如何获取枚举中定义的项目数?

“项目”的数量实际上可能意味着两件完全不同的事情。请考虑以下示例。

enum MyEnum
{
    A = 1,
    B = 2,
    C = 1,
    D = 3,
    E = 2
}

MyEnum中定义的“项目”数量是多少?

项目数量是5吗? (ABCDE

或者它是3? (123

MyEnum(5)中定义的名称的数量可以如下计算。

var namesCount = Enum.GetNames(typeof(MyEnum)).Length;

MyEnum(3)中定义的的数量可以如下计算。

var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();

答案 2 :(得分:70)

Enum.GetValues(typeof运算(MyEnum))长度;

答案 3 :(得分:12)

我在C回答这个问题时看到的一个漂亮的技巧,只需在枚举中添加最后一个元素并使用它来说明枚举中有多少元素:

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

如果您定义的开始值不是0,则可以使用NumberOfTypes - Type1来确定元素的数量。

我不确定这种方法是否比使用Enum更快,而且我也不确定它是否被认为是正确的方法,因为我们让Enum为我们确定这些信息。

答案 4 :(得分:6)

您可以使用Enum.GetNames在枚举中返回IEnumerable值,然后.Count生成IEnumerable。

GetNames产生的结果与GetValues大致相同,但速度更快。

答案 5 :(得分:6)

从之前的答案中只添加代码示例。

 class Program
    {
        static void Main(string[] args)
        {
            int enumlen = Enum.GetNames(typeof(myenum)).Length;
            Console.Write(enumlen);
            Console.Read();
        }
        public enum myenum
        {
            value1,
            value2
        }
    }

答案 6 :(得分:5)

我今天进行了基准测试,并得出了有趣的结果。在这三个之中:

cellForRow

GetNames(enum)迄今为止最快!

var count1 = typeof(TestEnum).GetFields().Length;
var count2 = Enum.GetNames(typeof(TestEnum)).Length;
var count3 = Enum.GetValues(typeof(TestEnum)).Length;

答案 7 :(得分:4)

如果您发现自己经常编写上述解决方案,那么您可以将其作为通用实现:

public static int GetEnumEntries<T>() where T : struct, IConvertible 
{
    if (!typeof(T).IsEnum)
        throw new ArgumentException("T must be an enumerated type");

    return Enum.GetNames(typeof(T)).Length;
}

答案 8 :(得分:1)

对于Visual Basic:

[Enum].GetNames(typeof(MyEnum)).Length没有与我合作,但是 [Enum].GetNames(GetType(Animal_Type)).length做到了。

答案 9 :(得分:1)

我刚才正在研究这个问题,对当前解决方案的可读性感到不满意。如果您正在非正式地编写代码或在小项目上编写代码,则可以在枚举的末尾添加另一个名为“Length”的项。这样,您只需输入:

var namesCount = (int)MyEnum.Length;

当然,如果其他人打算使用你的代码 - 或者我确信在许多其他情况下在这种情况下不适用于我 - 这个解决方案可能是从不明智到可怕的任何地方。