How do I convert an enum to a list in C#?
是否有方法将
这将返回枚举所有值的
1 |
如果你想成为一个
要在数组上使用cast函数,您需要在使用部分中包含
更简单的方法:
1 2 3 4 |
简短的回答是,使用:
1 |
如果您需要一个局部变量,它是
为什么语法是这样的?!
.NET数组确实有一种协方差,但由于
因此,.NET 1.0方法必须声明其返回类型为
每次使用相同的枚举类型再次调用
如果需要多个不同位置的所有值的列表,请考虑只调用一次
1 2 | public static readonly ReadOnlyCollection<SomeEnum> AllSomeEnumValues = Array.AsReadOnly((SomeEnum[])Enum.GetValues(typeof(SomeEnum))); |
然后您可以多次使用
为什么使用
许多其他答案都使用
如果您使用
1 |
还有一个问题:当调用
以下是我喜欢的方式,使用LINQ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class EnumModel { public int Value { get; set; } public string Name { get; set; } } public enum MyEnum { Name1=1, Name2=2, Name3=3 } public class Test { List<EnumModel> enums = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Select(c => new EnumModel() { Value = (int)c, Name = c.ToString() }).ToList(); } |
希望它有帮助
1 |
非常简单的答案
这是我在一个应用程序中使用的属性
1 2 3 4 5 6 7 |
1 |
我经常得到这样一个
1 |
为了有用…用于将值转换为列表的代码,该列表将枚举转换为文本的可读形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class KeyValuePair { public string Key { get; set; } public string Name { get; set; } public int Value { get; set; } public static List<KeyValuePair> ListFrom<T>() { var array = (T[])(Enum.GetValues(typeof(T)).Cast<T>()); return array .Select(a => new KeyValuePair { Key = a.ToString(), Name = a.ToString().SplitCapitalizedWords(), Value = Convert.ToInt32(a) }) .OrderBy(kvp => kvp.Name) .ToList(); } } |
…及配套系统。字符串扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /// <summary> /// Split a string on each occurrence of a capital (assumed to be a word) /// e.g. MyBigToe returns"My Big Toe" /// </summary> public static string SplitCapitalizedWords(this string source) { if (String.IsNullOrEmpty(source)) return String.Empty; var newText = new StringBuilder(source.Length * 2); newText.Append(source[0]); for (int i = 1; i < source.Length; i++) { if (char.IsUpper(source[i])) newText.Append(' '); newText.Append(source[i]); } return newText.ToString(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class NameValue { public string Name { get; set; } public object Value { get; set; } } public class NameValue { public string Name { get; set; } public object Value { get; set; } } public static List<NameValue> EnumToList<T>() { var array = (T[])(Enum.GetValues(typeof(T)).Cast<T>()); var array2 = Enum.GetNames(typeof(T)).ToArray<string>(); List<NameValue> lst = null; for (int i = 0; i < array.Length; i++) { if (lst == null) lst = new List<NameValue>(); string name = array2[i]; T value = array[i]; lst.Add(new NameValue { Name = name, Value = value }); } return lst; } |
将枚举转换为列表此处提供的详细信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 | private List<SimpleLogType> GetLogType() { List<SimpleLogType> logList = new List<SimpleLogType>(); SimpleLogType internalLogType; foreach (var logtype in Enum.GetValues(typeof(Log))) { internalLogType = new SimpleLogType(); internalLogType.Id = (int) (Log) Enum.Parse(typeof (Log), logtype.ToString(), true); internalLogType.Name = (Log)Enum.Parse(typeof(Log), logtype.ToString(), true); logList.Add(internalLogType); } return logList; } |
在顶层代码中,日志是枚举,simplelogtype是日志的结构。
1 2 3 4 5 6 7 | public enum Log { None = 0, Info = 1, Warning = 8, Error = 3 } |
如果您希望枚举int作为键,名称作为值,那么如果您将数字存储到数据库中,并且它来自枚举,那么这就很好了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | void Main() { ICollection<EnumValueDto> list = EnumValueDto.ConvertEnumToList<SearchDataType>(); foreach (var element in list) { Console.WriteLine(string.Format("Key: {0}; Value: {1}", element.Key, element.Value)); } /* OUTPUT: Key: 1; Value: Boolean Key: 2; Value: DateTime Key: 3; Value: Numeric */ } public class EnumValueDto { public int Key { get; set; } public string Value { get; set; } public static ICollection<EnumValueDto> ConvertEnumToList<T>() where T : struct, IConvertible { if (!typeof(T).IsEnum) { throw new Exception("Type given T must be an Enum"); } var result = Enum.GetValues(typeof(T)) .Cast<T>() .Select(x => new EnumValueDto { Key = Convert.ToInt32(x), Value = x.ToString(new CultureInfo("en")) }) .ToList() .AsReadOnly(); return result; } } public enum SearchDataType { Boolean = 1, DateTime, Numeric } |
1 2 3 4 5 6 7 8 | /// <summary> /// Method return a read-only collection of the names of the constants in specified enum /// </summary> /// <returns></returns> public static ReadOnlyCollection<string> GetNames() { return Enum.GetNames(typeof(T)).Cast<string>().ToList().AsReadOnly(); } |
其中t是一种枚举类型;添加:
1 | using System.Collections.ObjectModel; |
可以使用以下泛型方法:
1 2 3 4 5 6 7 8 9 10 11 | public static List<T> GetItemsList<T>(this int enums) where T : struct, IConvertible { if (!typeof (T).IsEnum) { throw new Exception("Type given must be an Enum"); } return (from int item in Enum.GetValues(typeof (T)) where (enums & item) == item select (T) Enum.Parse(typeof (T), item.ToString(new CultureInfo("en")))).ToList(); } |