我有有成员相同名称的两个相同的枚举,但他们在不同的命名空间,使他们有“不同类型”,但实际上namespace1.enum1 {A,B,C, d,e,f}和namespace2.enum2 {a,b,c,d,e,f}快速的IEnumerable <enum1>列出<enum2> convertation
如何不使用循环将IEnumerable<enum1>
转换为List<enum2>
最简单的方法是什么?
我有有成员相同名称的两个相同的枚举,但他们在不同的命名空间,使他们有“不同类型”,但实际上namespace1.enum1 {A,B,C, d,e,f}和namespace2.enum2 {a,b,c,d,e,f}快速的IEnumerable <enum1>列出<enum2> convertation
如何不使用循环将IEnumerable<enum1>
转换为List<enum2>
最简单的方法是什么?
或者你可以使用Cast
(仍然为O(n):-))
var result = original.Cast<int>().Cast<Enum2>().ToList();
警告 看来,这并不总是因为工作预计(InvalidCastException
可以在某些情况下抛出)。 查看评论来找出原因。
由于'Cast'所做的不恰当的优化,在某些情况下会实际抛出异常。奇怪,但是是真的。还有一篇关于它的帖子 - 会试图挖掘它。 –
参见http://stackoverflow.com/questions/40604183/('int' /'uint'就像'int'/enum。) –
@JonSkeet如果两个枚举的基础类型是相同的,那么它仍然是这是一个问题吗?虽然这只是因为拳击才值得避免。 – juharr
没有循环就没有安全的方法,但是如果你能够使用'unsafe'代码,你可以直接通过转换来转换内存。但是,如果枚举具有不同的内存布局,这可能会导致内存无效。 – Kroltan