给定这样的枚举:
public enum City
{
London = 1,
Liverpool = 20,
Leeds = 25
}
public enum House
{
OneFloor = 1,
TwoFloors = 2
}
如何将这些转换为 IEnumerable 列表,其中包含两个名为“数据”和“值”的字段。是否有可能有一个通用的方法或方法来做到这一点?请注意,这些值并不总是连续的。
给定这样的枚举:
public enum City
{
London = 1,
Liverpool = 20,
Leeds = 25
}
public enum House
{
OneFloor = 1,
TwoFloors = 2
}
如何将这些转换为 IEnumerable 列表,其中包含两个名为“数据”和“值”的字段。是否有可能有一个通用的方法或方法来做到这一点?请注意,这些值并不总是连续的。
您可以使用Enum.GetValues
:
City[] values = (City[])Enum.GetValues(typeof(City));
var valuesWithNames = from value in values
select new { value = (int)value, name = value.ToString() };
怎么样:
//Tested on LINQPad
void Main()
{
var test = GetDictionary<City>();
Console.WriteLine(test["London"]);
}
public static IDictionary<string, int> GetDictionary<T>()
{
Type type = typeof(T);
if (type.IsEnum)
{
var values = Enum.GetValues(type);
var result = new Dictionary<string, int>();
foreach (var value in values)
{
result.Add(value.ToString(), (int)value);
}
return result;
}
else
{
throw new InvalidOperationException();
}
}
public enum City
{
London = 1,
Liverpool = 20,
Leeds = 25
}
你可以试试这个:
var cities Enum.GetValues(typeof(City)).OfType<City>()
.Select(x =>
new
{
Value = (int)x,
Text = x.ToString()
});
编辑
用演员代替 OfType
var cities = ((IEnumerable<City>)Enum.GetValues(typeof(City)))
.Select(x =>
new
{
Value = (int)x,
Text = x.ToString()
});