[英]Is there a way to convert between a collection of custom enum to a collection of another custom enum?
我们已经知道可以将一个枚举转换为另一种枚举 ,因此可以进行以下编译:
public class EnumTest
{
enum Enum1 { Foo };
enum Enum2 { Foo };
void Test ()
{
System.Enum e = new Enum2(); // compiles
Enum1 e1 = (Enum1)new Enum2(); // compiles with an explicit cast
}
}
但这不能编译:
public class EnumTest
{
enum Enum1 { Foo };
enum Enum2 { Foo };
void Test ()
{
List<System.Enum> eList = new List<Enum2>(); // doesn't compile
List<Enum1> e1List = (List<Enum1>)new List<Enum2>(); // doesn't compile
}
}
这是一个协方差问题吗? 如果没有,是否有办法使其起作用?
这不是协方差问题,而是方差问题。 枚举是值类型,值类型不支持协方差。 List<T>
是一个class
,而不是interface
或delegate
。 协方差仅支持接口和委托。
您必须转换/转换列表中的元素:
List<Enum2> list2 = ...
List<System.Enum> eList = list2.Cast<System.Enum>().ToList();
但这当然会产生一个新列表。 eList
与list2
是不同的实例。
您不能像这样Enum2
, Enum1
和Enum2
是完全不同的东西。 您可以使用一些简单的Linq来完成。 例如:
List<Enum2> eList = new List<Enum2>
{
Enum2.Foo
};
List<Enum1> e1List = eList
.Select(x => (Enum1)x)
.ToList();
请注意,这使用的是简单的情况,但是您可能要使用链接的问题中的转换函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.