【发布时间】:2020-06-14 14:37:56
【问题描述】:
我尝试使用 yield 在每次迭代时返回字符串,但我的res 不是字符串,而是{Namespace.Class.<getMutations>d__10} 类型。我得到了我想要的所有结果,但它们是一次性返回的,而不是一一返回。我做错了什么?
public static IEnumerable<string> generate(string mask)
{
foreach (List<string> pattern in list)
{
var res = getMutations(pattern);
yield return "result: " + res;
}
}
private static IEnumerable<string> getMutations(List<string> pattern)
{
IEnumerable<string> mutations = null;
switch (pattern.Count)
{
case 4:
mutations =
from m0 in pattern[0]
from m1 in pattern[1]
from m2 in pattern[2]
from m3 in pattern[3]
select "" + m0 + m1 + m2 + m3;
break;
case 5:
mutations =
from m0 in pattern[0]
from m1 in pattern[1]
from m2 in pattern[2]
from m3 in pattern[3]
from m4 in pattern[4]
select "" + m0 + m1 + m2 + m3 + m4;
break;
}
foreach (var mutation in mutations)
yield return mutation;
}
【问题讨论】:
-
您希望
res拥有什么类型? -
我希望收到一个字符串
-
foreach在res然后yield在foreach内。 -
res是IEnumerable<string>类型,因为您的方法正在返回一个集合。 -
还要考虑完全避免在第一种方法中使用
yield return。我强烈怀疑您可以使用 LINQ(Select可能还有SelectMany)来实现它。
标签: c# yield-return