我正在做这样的事情
IEnumerable<Poof> poofs = new[]{ Poof.One, Poof.Two };
我认为只获取枚举的所有元素会更酷,所以我这样做了。
foreach(Poof poof in Enum.GetValues(typeof (Poof)))
Console.WriteLine(poof);
就我所看到的打印到屏幕上的值而言,上述方法有效。然而,当我尝试存储结果时,我遇到了问题。为什么会这样?我该如何应对?
IEnumerable<Poof> poofs = Enum.GetValues(typeof (Poof));
最佳答案
IEnumerable<Poof> poofs = Enum.GetValues(typeof(Poof)).OfType<Poof>()
既然你知道所有元素都是Poof
,你可以使用Cast
,但是当你不知道集合中有什么类型时,你可以使用OfType
。它们之间的唯一区别是 Cast
,将项目转换为指定类型不进行检查,但 OfType
检查每种类型,如果它可转换为指定类型,则对其进行强制转换并返回。它的实现如下:
static IEnumerable<TResult> OfTypeIterator<TResult>(IEnumerable source)
{
foreach (object obj in source) {
if (obj is TResult) yield return (TResult)obj;
}
关于c# - 如何将 enum 中的所有元素列出到相同类型的 IEnumerable 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961513/