gpt4 book ai didi

c# - 使用 yield 的方法不允许调用自己

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:01 27 4
gpt4 key购买 nike

这很可能是用户错误(我有点希望如此)。我在 C# 中遇到了一个奇怪的情况,如果我尝试在使用 yield 的方法中进行递归调用,它似乎不受尊重(即调用被忽略)。

下面的程序说明了这一点:

// node in an n-ary tree
class Node
{
public string Name { get; set; }
public List<Node> ChildNodes { get; set; }
}
class Program
{
// walk tree returning all names
static IEnumerable<string> GetAllNames(IEnumerable<Node> nodes)
{
foreach (var node in nodes)
{
if (node.ChildNodes != null)
{
Console.WriteLine("[Debug] entering recursive case");
// recursive case, yield all child node names
GetAllNames(node.ChildNodes);
}
// yield current name
yield return node.Name;
}
}

static void Main(string[] args)
{
// initalize tree structure
var tree = new List<Node>
{
new Node()
{
Name = "One",
ChildNodes = new List<Node>()
{
new Node() {Name = "Two"},
new Node() {Name = "Three"},
new Node() {Name = "Four"},
}
},
new Node() {Name = "Five"}
};

// try and get all names
var names = GetAllNames(tree);

Console.WriteLine(names.Count());
// prints 2, I would expect it to print 5

}
}

最佳答案

您正在调用电话,但什么也没做。你需要在这里实际使用结果

static IEnumerable<string> GetAllNames(IEnumerable<Node> nodes) {
foreach (var node in nodes) {
if (node.ChildNodes != null) {
foreach (var childNode in GetAllNames(node.ChildNodes)) {
yield return childNode;
}
}
yield return node.Name;
}
}

关于c# - 使用 yield 的方法不允许调用自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com