使用枚举数据C#创建对象列表

Mdb*_*Mdb 3 c# algorithm enums

所以我有一个枚举:

public enum myEnum
{
    IBM = 1,
    HP = 2,
    Lenovo = 3
}
Run Code Online (Sandbox Code Playgroud)

我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; }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个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),
};
Run Code Online (Sandbox Code Playgroud)

我可以创建两个数组 - 一个使用枚举名称,另一个使用枚举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; }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 13

var brands = Enum.GetValues(typeof(myEnum))
                 .Cast<myEnum>()
                 .Select(x => new Brand(x.ToString(), (int)x))
                 .ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 鼓励downvoter发表评论,所以我可以解决你认为不正确的问题.提示:我测试了这段代码并且它有效. (4认同)