【发布时间】:2016-04-13 08:54:17
【问题描述】:
我有一个通用树类,我想为其实现 IEnumerable 接口。我之前在 stackoverflow 上发现的问题与我的问题有点不同。我知道我在做一些扭曲的事情,但我不知道它是什么。这是我的代码:
class Node<T>: IEnumerable<T>
{
private T data;
private LinkedList<Node<T>> children;
public Node(T data)
{
this.data = data;
children = new LinkedList<Node<T>>();
}
public void AddChildNode(Node<T> node)
{
children.AddFirst(node);
}
public void MyTraverse(Node<T> node, List<T> visited)
{
visited.Add(node.data);
foreach (Node<T> kid in node.children)
MyTraverse(kid, visited);
}
public IEnumerator<T> GetEnumerator()
{
return children.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
在函数 GetEnumerator() 中,我收到一个我不知道如何修复的转换错误。谁能帮帮我?
【问题讨论】:
-
请发布错误信息。
-
错误消息:错误 1 无法将类型 'System.Collections.Generic.LinkedList
>.Enumerator' 隐式转换为 'System.Collections.Generic.IEnumerator ' D :\BoxSync\amirho\Categories\Implementation\SAT_Solvers\Z3\Microsoft_Example_Added\Microsoft_Example_Added\Node.cs 35 20 Microsoft_Example_Added -
在签名中加T并不能解决问题!
-
一件事是让方法编译,另一件事是让它做你想做的事。 您希望它做什么并返回? 要使其编译,只需执行
return children.Select(node => node.data);但我怀疑这会给您想要的。
标签: c# generics ienumerable