我有一个枚举类型,我想显示出所有可能的值。是否有一种方法可以获取枚举所有可能值的数组或列表,而不是手动创建这样的列表?例如,如果我有一个枚举:
public enum Enumnum { TypeA, TypeB, TypeC, TypeD }
我该如何获得一个包含{ TypeA, TypeB, TypeC, TypeD }
的List<Enumnum>
呢?
Enum.GetValues
使您获得枚举值的简单数组:var valuesAsArray = Enum.GetValues(typeof(Enumnum));
这将为您提供一个通用列表:
var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();
Enumnum.GetValues()
和 Enumnum.GetNames()
不存在。 - dallevar valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));
。请注意,在翻译过程中,我保留了原文中的代码和变量名以确保准确性。 - Jeppe Stig NielsenEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
- mr5ActualType
应该是什么意思?对于枚举类型,它将是OP示例中的Enumnum
,或者它可以是底层类型(通常为int
)。你还有其他想法吗? - Dirk VollmarEnum.GetValues<Enumnum>();
- Kim试试这段代码:
Enum.GetNames(typeof(Enumnum));
这将返回一个string[]
,其中包含所选枚举类型的所有枚举名称。
Enum.GetValues(typeof(Enumnum));
返回枚举中值的数组。
public enum Enumnum {
TypeA = 11,
TypeB = 22,
TypeC = 33,
TypeD = 44
}
这个enum
的所有整数值为11,22,33,44
。
你可以通过以下方式获取这些值:
var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);
string.Join(",", enumsValues)
的结果为11,22,33,44
。
您可以使用
Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();
typeof(SomeEnum).GetEnumValues();
如果您更喜欢一种更通用的方法,这里有一个。您可以根据需要添加更多的转换器。
public static class EnumConverter
{
public static string[] ToNameArray<T>()
{
return Enum.GetNames(typeof(T)).ToArray();
}
public static Array ToValueArray<T>()
{
return Enum.GetValues(typeof(T));
}
public static List<T> ToListOfValues<T>()
{
return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}
public static IEnumerable<T> ToEnumerable<T>()
{
return (T[])Enum.GetValues(typeof(T));
}
}
示例实现:
string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
Array data = EnumConverter.ToValueArray<ePermittedRoles>();
string[] myArray = Enum.GetNames(typeof(Enumnum));
您可以这样访问值数组:
Array myArray = Enum.GetValues(typeof(Enumnum));
这个问题是关于如何在C#中获取所有enum
值的数组。
如果你想要获取选定的enum
值的数组呢?
你的枚举类型
enum WeekDays
{
Sunday,
Monday,
Tuesday
}
Sunday
。 WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };
WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
(x => x == WeekDays.Sunday).ToArray();
感谢知识渊博的翻译。
参考资料:
希望能对某些人有所帮助。