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

本文关键字:创建对象 列表 数据 枚举 | 更新日期: 2023-09-27 18:34:15

所以我有一个枚举:

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; }
}

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

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

我建议创建一个通用的 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>()

你的代码非常好,但我正在改变你的代码的位级简化。

枚举类(未更改):

public enum myEnum
{
    IBM = 1,
    HP = 2,
    Lenovo = 3
}

品牌类(更改参数长度,可以传递一个枚举参数):

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# 遍历枚举?(索引系统阵列)