如何在枚举中查找枚举器的序列号

  • 本文关键字:枚举 序列号 查找 c#
  • 更新时间 :
  • 英文 :


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

基本上你做不到。不支持此操作。GetNamesGetValues的顺序是定义的,但基于。来自GetFields的顺序是官方未定义的。

如果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());