如何在通用列表中添加枚举

时间:2014-05-06 18:50:05

标签: c#

如何在通用列表中只添加一个枚举项?

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

4 个答案:

答案 0 :(得分:3)

你可以像这样使用双重演员:

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

答案 1 :(得分:0)

在致电List<ProcessorEnum>之前投靠Add

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

答案 2 :(得分:0)

正如@Selman在他的回答中所示,您可以将其转换为object然后转换为T,但这涉及“拳击和取消装箱”。您可以使用此

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

答案 3 :(得分:0)

在这种情况下,列表必须是ProcessorEnum值的列表。该方法实际上不是通用的,因为它不能接受任何类型的列表。您应该简单地使该方法非通用:

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