グラフクラスの実装に取り組んでいます。クラスでは、幅優先と深さ優先のトラバーサルは、トラバースノードを格納することを除いて同じアルゴリズムであり、それぞれキューとスタックが使用されることを学びました。そこで、すべてのロジックを、スタックをADTとして渡すDepthFirstSearch()によって呼び出されるTraversal()メソッドに入れます。
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をデリゲートに渡すことができないと想定していますか?それで、それを回避するために、私はラムダを使用してそのプロパティの周りを閉じました。しかし、s.Popやs.Pushではなくs.Countにラムダが必要な理由を誰かが説明できますか?ありがとう。