如何在枚举中找到枚举数的序列号?

时间:2014-09-22 19:45:18

标签: c#

我们假设有一个包含非有序值枚举器的枚举。在枚举中查找给定枚举数的序列号的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

基本上你不能。这不受支持。 GetNamesGetValues 的订单是定义的,但基于。来自GetFields的订单正式未定义。

答案 1 :(得分:0)

如果未正式定义GetFieldsIndex,您可能会非正式地定义

enum MyEnum { a = 5, b = 2, c = 4, d = 1, e = 3 }

public static int GetFieldIndex(this Enum value)
{
  Type t = value.GetType();
  var Fields = t.GetFields();
  Fields = Array.FindAll(Fields, f => f.FieldType.Equals(t));
  var typedFields = Array.ConvertAll(Fields, f => f.GetValue(null));

  return Array.IndexOf(typedFields, value);
}

然后以简单的方式消费

        MyEnum value = MyEnum.d;
        Console.WriteLine(value.GetFieldIndex());