c# - 如何将 enum 中的所有元素列出到相同类型的 IEnumerable 数组中?

标签 c# algorithm enums

我正在做这样的事情

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/

相关文章:

c++ - 快速排序和合并排序错误的内存分配(不对超过 32k 的元素进行排序)

java - 搜索最小二叉堆

objective-c - 从 Objective-C 使用 Swift 类和枚举

python - 如何使用枚举包含 Jsonschema 多类型参数?

c# - 是否可以在简单注入(inject)器的方法中使用线程范围的生活方式

c# - 如何忽略 Dapper 中的某些属性?

python - 在 Python 中查找字符串是否与单词、短语、 bool AND 列表中的任何术语匹配的最快方法是什么?

c# - .NET 中的标志枚举

c# - 为多个应用程序创建安装程序

c# - ASP.Net - C# - SQL Server - 仅使用已更改的记录刷新缓存的数据表