我在做这样的事。
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/