所以我有一个枚举:
public enum myEnum
{
IBM = 1,
HP = 2,
Lenovo = 3
}
我有Brand
班
public class Brand
{
public Brand(string name, int id)
{
Name = name;
Id = id;
}
public string Name { get; private set; }
public int Id { get; private set; }
}
我想创建一个Brand
对象列表,其中填充了MyEnum
中的数据。类似的东西:
private IEnumerable<Brand> brands = new List<Brand>
{
new Brand(myEnum.IBM.ToString(), (int) myEnum.IBM),
new Brand(myEnum.HP.ToString(), (int) myEnum.HP),
new Brand(myEnum.Lenovo.ToString(), (int) myEnum.Lenovo),
};
我可以创建两个数组 - 一个使用枚举名称,另一个使用枚举ID,并预先设置它们以便为每次迭代创建Brand对象,但是想知道是否有更好的解决方案。
最后,根据我的说法,我将使用Royi Mindel解决方案,这是最合适的。非常感谢Daniel Hilgarth的回答以及他对Royi Mindel建议工作的帮助。如果可以的话,我会同意这两个问题。
public static class EnumHelper
{
public static IEnumerable<ValueName> GetItems<TEnum>()
where TEnum : struct, IConvertible, IComparable, IFormattable
{
if (!typeof(TEnum).IsEnum)
throw new ArgumentException("TEnum must be an Enumeration type");
var res = from e in Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
select new ValueName() { Id = Convert.ToInt32(e), Name = e.ToString() };
return res;
}
}
public struct ValueName
{
public int Id { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:13)
var brands = Enum.GetValues(typeof(myEnum))
.Cast<myEnum>()
.Select(x => new Brand(x.ToString(), (int)x))
.ToArray();
答案 1 :(得分:3)
我建议创建一个通用的ValueName类来适应所有枚举,而不是使特定的类适合特定的枚举
public static class EnumHelper
{
public static IEnumerable<ValueName> GetItems<TEnum>()
where TEnum : struct, IConvertible, IComparable, IFormattable
{
if (!typeof(TEnum).IsEnum)
throw new ArgumentException("TEnum must be an Enumeration type");
var res = from e in Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
select new ValueName() { Value = Convert.ToInt32(e), Name = e.ToString()};
return res;
}
}
public struct ValueName
{
public int Value { get; set; }
public string Name { get; set; }
}
然后你就做了:
EnumHelper.GetItems<myEnum>()
答案 2 :(得分:2)
您的代码非常好,但我更改了代码的位级简化。
枚举类(未更改):
public enum myEnum
{
IBM = 1,
HP = 2,
Lenovo = 3
}
品牌类(更改参数长度,您可以传递Enum的一个参数):
public class Brand
{
public Brand(Enum Data)
{
Name = Data.ToString();
Id = Convert.ToInt32(Data);
}
public string Name { get; private set; }
public int Id { get; private set; }
}
这是改变方式:
private IEnumerable<Brand> brands = new List<Brand>
{
new Brand(myEnum.IBM),
new Brand(myEnum.HP),
new Brand(myEnum.Lenovo),
};
您希望看到此示例:C# Iterating through an enum? (Indexing a System.Array)