我有两个 IEnumerable
小号:
IEnumerable<string> first = ...
IEnumerable<string> second = ...
我想创建第二个 IEnumerable<string>
这是每个 IEnumerable
的每个元素的串联.
例如:
IEnumerable<string> first = new [] {"a", "b"};
IEnumerable<string> second = new [] {"c", "d"};
foreach (string one in first)
{
foreach (string two in second)
{
yield return string.Format("{0} {1}", one, two);
}
}
这会产生:
"a c"; "a d"; "b c"; "b d";
问题是,有时这两个 IEnumerable
之一s 为空:
IEnumerable<string> first = new string[0];
IEnumerable<string> second = new [] {"c", "d"};
在这种情况下,嵌套的 foreach
构造永远不会到达 yield return
陈述。当IEnumerable
是空的,我希望结果只是非空 IEnumerable
的列表.
如何生成我正在寻找的组合?
编辑:
实际上,我有三个不同的 IEnumerable
s 我正在尝试组合,因此为空 IEnumerable
的每个可能排列添加 if 条件似乎很糟糕。如果那是唯一的方法,那么我想我将不得不那样做。
最佳答案
您可以简单地检查第一个可枚举不为空:
IEnumerable<string> first = new [] {"a", "b"};
IEnumerable<string> second = new [] {"c", "d"};
var firstList = first.ToList();
if (!firstList.Any()) {
return second;
}
foreach (string one in firstList)
{
foreach (string two in second)
{
yield return string.Format("{0} {1}", one, two);
}
}
要消除正例中的双重 IEnumerable
评估,只需将第一个可枚举转换为列表
关于c# - 在 C# 中,如何在嵌套的 foreach 循环中强制迭代 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740021/