如何在泛型列表中添加枚举

本文关键字:添加 枚举 列表 泛型 | 更新日期: 2023-09-27 18:02:06

如何在泛型列表中只添加一个enum项?

public List<T> PopuleList<T>() where T : struct
{
    List<T> list = new List<T>();
    if (typeof(T) == typeof(ProcessorEnum))
    {
        list.AddRange(Enum.GetValues(typeof(T)) as IEnumerable<T>); // This work, but I need to add only one value.
        list.Add(ProcessorEnum.B2B); // <- I need like this, but this give-me a compile error.
    }
    return list;
}

如何在泛型列表中添加枚举

可以像这样使用双强制转换:

list.Add((T)(object)ProcessorEnum.B2B);

在调用Add之前转换为List<ProcessorEnum>:

(list as List<ProcessorEnum>).Add(ProcessorEnum.B2B);

正如@Selman在他的回答中所示,您可以将其转换为object然后转换为T,但这涉及"装箱和拆箱"。您可以使用这个

来避免装箱和拆箱
list.Add((ProcessorEnum.B2B as T?).Value);

在这种情况下,列表需要是ProcessorEnum值的列表。该方法实际上不是泛型的,因为它不能接受任何类型的列表。您只需将该方法设置为非泛型:

public List<ProcessorEnum> PopuleList()
{
    return new List<ProcessorEnum>(){ProcessorEnum.B2B};
}