递归解决方案:
IEnumerable Flatten(IEnumerable array) { foreach(var item in array) { if(item is IEnumerable) { foreach(var subitem in Flatten((IEnumerable)item)) { yield return subitem; } } else { yield return item; } } }
编辑1:
Jon在评论中解释为什么它不能成为通用方法,看一看!
编辑2:
马特建议将其作为一种扩展方法.在这里,您只需将第一行替换为:
public static IEnumerable Flatten(this IEnumerable array)
你可以像这样使用它:
foreach(var item in myArray.Flatten()) { ... }