我在做这样的事。

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# - 如何将所有元素从枚举列出到相同类型的IEnumerable数组中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23961513/

10-12 14:25