如何在枚举中查找枚举器的序列号
本文关键字:枚举 序列号 查找 | 更新日期: 2023-09-27 18:23:53
让我们假设有一个枚举包含非按值排序的枚举器。在枚举中查找给定枚举器的序列号的最简单方法是什么?
基本上你做不到。不支持此操作。GetNames
和GetValues
的顺序是定义的,但基于值。来自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());