我正在实现一个图形类。在课堂上我了解到广度优先和深度优先遍历是相同的算法,除了存储遍历节点分别使用队列和堆栈。因此,我将所有逻辑放入一个 Traversal() 方法中,该方法由 DepthFirstSearch() 调用,该方法作为 ADT 在堆栈中传递。
public void DepthFirstSearch(GraphNode<T> root)
{
Stack<GraphNode<T>> s = new Stack<GraphNode<T>>();
Action<GraphNode<T>> insert = s.Push;
Func<GraphNode<T>> retrieve = s.Pop;
//Func<int> stackCount = s.Count; Cannot implicitly convert type 'int' to System.Func<int>' error
Func<int> stackCount = () => s.Count;
Traversal(root, insert, retrieve, stackCount);
}
我假设我不能将 s.Count 传递给委托,因为它是一个类属性?所以为了解决这个问题,我使用了一个 lambda 来关闭该属性。但是谁能解释为什么我需要 lambda 用于 s.Count 而不是 s.Pop 或 s.Push?谢谢。