C# 如何在常规列表中添加枚举

C# 如何在常规列表中添加枚举,c#,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>);

如何在常规列表中仅添加一个枚举项

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;
}
公共列表PopuleList(),其中T:struct
{
列表=新列表();
if(typeof(T)=typeof(ProcessorEnum))
{
list.AddRange(Enum.GetValues(typeof(T))作为IEnumerable);//这是可行的,但我只需要添加一个值。
list.Add(ProcessorEnum.B2B);//在调用
Add
之前强制转换到
list

(list as List<ProcessorEnum>).Add(ProcessorEnum.B2B);
(列表为列表)。添加(ProcessorEnum.B2B);
在调用
添加之前转换到
列表

(list as List<ProcessorEnum>).Add(ProcessorEnum.B2B);
(列表为列表)。添加(ProcessorEnum.B2B);
在调用
添加之前转换到
列表

(list as List<ProcessorEnum>).Add(ProcessorEnum.B2B);
(列表为列表)。添加(ProcessorEnum.B2B);
在调用
添加之前转换到
列表

(list as List<ProcessorEnum>).Add(ProcessorEnum.B2B);
(列表为列表)。添加(ProcessorEnum.B2B);

您可以像这样使用双掷:

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

您可以像这样使用双掷:

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

您可以像这样使用双掷:

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

您可以像这样使用双掷:

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

正如@Selman在他的回答中所显示的,您可以将其转换为
object
,然后转换为
T
,但这涉及到“装箱和拆箱”。您可以使用此选项避免装箱和拆箱

list.Add((ProcessorEnum.B2B as T?).Value);

正如@Selman在他的回答中所显示的,您可以将其转换为
object
,然后转换为
T
,但这涉及到“装箱和拆箱”。您可以使用此选项避免装箱和拆箱

list.Add((ProcessorEnum.B2B as T?).Value);

正如@Selman在他的回答中所显示的,您可以将其转换为
object
,然后转换为
T
,但这涉及到“装箱和拆箱”。您可以使用此选项避免装箱和拆箱

list.Add((ProcessorEnum.B2B as T?).Value);

正如@Selman在他的回答中所显示的,您可以将其转换为
object
,然后转换为
T
,但这涉及到“装箱和拆箱”。您可以使用此选项避免装箱和拆箱

list.Add((ProcessorEnum.B2B as T?).Value);

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

public List<ProcessorEnum> PopuleList()
{
    return new List<ProcessorEnum>(){ProcessorEnum.B2B};
}
publicslist民粹主义者()
{
返回新列表(){ProcessorEnum.B2B};
}

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

public List<ProcessorEnum> PopuleList()
{
    return new List<ProcessorEnum>(){ProcessorEnum.B2B};
}
publicslist民粹主义者()
{
返回新列表(){ProcessorEnum.B2B};
}

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

public List<ProcessorEnum> PopuleList()
{
    return new List<ProcessorEnum>(){ProcessorEnum.B2B};
}
publicslist民粹主义者()
{
返回新列表(){ProcessorEnum.B2B};
}

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

public List<ProcessorEnum> PopuleList()
{
    return new List<ProcessorEnum>(){ProcessorEnum.B2B};
}
publicslist民粹主义者()
{
返回新列表(){ProcessorEnum.B2B};
}


@Selman22有什么原因它不能工作吗?
t
ProcessorEnum
,因为你在
if
语句中检查了它,所以你可以将
List
转换为
List
,不是吗?你甚至不能将t转换为ProcessorEnum你如何将List转换为List?马克,我想这会导致编译器错误。但我相信您可以将其强制转换为非泛型列表though@MarcinJuraszek但是只有我们知道列表类型是list,编译器不知道t@Selman22它不起作用的原因是什么?
t
ProcessorEnum
,因为您在
if
语句中检查了它,所以您可以将
List
强制转换为
List
,不是吗?您甚至不能强制转换t如何将列表转换为列表?Marc,我想这会导致编译器错误。但我相信您可以将其转换为非泛型列表though@MarcinJuraszek但是只有我们知道列表类型是list,编译器不知道t@Selman22它不起作用的原因是什么?
t
ProcessorEnum
,因为您在中检查了它de>if
语句,所以您可以将
List
转换为
List
,不是吗?您甚至不能将t转换为ProcessorEnum您如何将List转换为List?Marc,我猜这将导致编译器错误。但我相信您可以将其转换为非泛型Listthough@MarcinJuraszek但是只有我们知道列表类型是list,编译器不知道t@Selman22它不起作用的原因是什么?
t
ProcessorEnum
,因为您在
if
语句中检查了它,所以您可以将
List
转换为
List
,不是吗?您甚至不能将t转换为ProcessorEnum您如何将List转换为List?Marc,我想这将导致编译器错误。但我相信您可以转换它到非泛型列表though@MarcinJuraszek但是只有我们知道列表类型是list,编译器不能这样做,但是当您在泛型方法中检查
typeof
时,您犯了错误。您不应该使用泛型,或者会有更好的方法
Enum。GetValues
将已经带来所有值那你为什么需要
ProcessorEnum.B2B
?我不知道。你可以这样做,但是当你在泛型方法中检查
typeof
时,你做错了什么。要么你不应该使用泛型,要么会有更好的方法
Enum。GetValues
已经带来了所有的值,那么你为什么需要
过程sorEnum.B2B
?我缺少它。你可以这样做,但是当你在泛型方法中检查
typeof
时,你做错了什么。要么你不应该使用泛型,要么会有更好的方法
Enum.GetValues
将已经带来所有的值,那么为什么你需要
ProcessorEnum.B2B
?我缺少在.at.可以这样做,但是当您在泛型方法中检查
typeof
时,您犯了错误。您不应该使用泛型,或者会有更好的方法
Enum。GetValues
将已经带来所有值,那么您为什么需要这些值呢