foreach 循环仅适用于 yield return,您在 GetSequences() 方法中的 GetSequences() 命令上没有 yield return;它返回的任何东西都不会被存储或返回。就像您正在这样做:
就像你在这样做:
static IEnumerable<string> GetSequences(string a)
{
GetSequences(a + ">");
}
当然没有 return 语句(它不会编译,但你知道这一点)。
在玩了一会儿之后,如果您想使用递归,我建议您不要使用可枚举,特别是因为循环和递归旨在服务于不同的目的,而带有 IEnumerable 的 foreach 最适合具有已经列举了。上面建议的循环,按原样,只是启用无限递归,并像这样实现递归的转义:
static IEnumerable<string> GetSequences(string a)
{
if(a.Length > 100)
yield return a;
else
foreach (var n in GetSequences(a + ">"))
yield return n;
}
产生以下输出:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,(也许按比例计算,我不想数)
通过像这样实现它,我能够得到你想要的输出:
static string GetSequences(string a, int len)
{
if (a.Length < len)
{
return GetSequences(a + ">", len);
}
else
return a;
}
static void Main(string[] args)
{
for (int i = 1; i < 5; i++)
{
Console.Write(GetSequences(">", i) + ",");
}
Console.Read();
}
当然,我的整数是任意的,它适用于任何长度。
编辑:我知道有一种方法可以按照 abatishchev 所说的方式进行,但我想不通。绞尽脑汁后,我得到了以下结果:
static IEnumerable<string> GetSequences(string a)
{
if (a.Length < 100)
{
yield return a;
foreach (var n in GetSequences(a + ">"))
yield return n;
}else
yield break;
}
这有你想要的输出,虽然我仍然认为使用循环递归有点有趣。