C#donds';不能使用树类

C#donds';不能使用树类,c#,lambda,callback,C#,Lambda,Callback,我曾尝试使用从Class Tree.cs到Form1.cs的接口回调函数,但它根本不执行任何操作。这是我的密码: Tree.cs中的函数 public void Print(IOnQuery<T> query,Node<T> node) { if (node == null) node = Top; if (node.Left != null) { Print(query,node.Left);

我曾尝试使用从Class Tree.cs到Form1.cs的接口回调函数,但它根本不执行任何操作。这是我的密码:

Tree.cs中的函数

public void Print(IOnQuery<T> query,Node<T> node)
{
        if (node == null) node = Top;
        if (node.Left != null)
        {
            Print(query,node.Left);
            query.GetDataItem(node);
        }
        else
        {
            query.GetDataItem(node);
        }

        if (node.Right != null)
        {
            Print(query,node.Right);
        }
}
public partial class Form1 : Form, IOnQuery<Car>
{

    public void GetDataItem(Node<Car> node)
    {
        listBox1.Items.Add(node.Item.ToString());
    }

}
public interface IOnQuery<T>
{
     void GetDataItem(Node<T> node);
}
公共作废打印(IOnQuery查询,节点)
{
如果(node==null)node=Top;
if(node.Left!=null)
{
打印(查询,节点,左侧);
query.GetDataItem(节点);
}
其他的
{
query.GetDataItem(节点);
}
if(node.Right!=null)
{
打印(查询,节点.右侧);
}
}
Form1.cs

public void Print(IOnQuery<T> query,Node<T> node)
{
        if (node == null) node = Top;
        if (node.Left != null)
        {
            Print(query,node.Left);
            query.GetDataItem(node);
        }
        else
        {
            query.GetDataItem(node);
        }

        if (node.Right != null)
        {
            Print(query,node.Right);
        }
}
public partial class Form1 : Form, IOnQuery<Car>
{

    public void GetDataItem(Node<Car> node)
    {
        listBox1.Items.Add(node.Item.ToString());
    }

}
public interface IOnQuery<T>
{
     void GetDataItem(Node<T> node);
}
public分部类Form1:Form,IOnQuery
{
公共void GetDataItem(节点)
{
listBox1.Items.Add(node.Item.ToString());
}
}
我的界面类

public void Print(IOnQuery<T> query,Node<T> node)
{
        if (node == null) node = Top;
        if (node.Left != null)
        {
            Print(query,node.Left);
            query.GetDataItem(node);
        }
        else
        {
            query.GetDataItem(node);
        }

        if (node.Right != null)
        {
            Print(query,node.Right);
        }
}
public partial class Form1 : Form, IOnQuery<Car>
{

    public void GetDataItem(Node<Car> node)
    {
        listBox1.Items.Add(node.Item.ToString());
    }

}
public interface IOnQuery<T>
{
     void GetDataItem(Node<T> node);
}
公共接口查询
{
作废GetDataItem(节点);
}

如果希望每次调用GetDataItem时都进行打印,可以使用事件

Form1
中,使用参数
IOnQuery query
节点创建如下事件

public event Action<IOnQuery<T>, Node<T>> OnDataItemGet;
其中
tree
是树对象

现在您所要做的就是,使
GetDataItem
触发事件。 可以通过在
GetDataItem
中添加一行来完成此操作:

OnDataItemGet?.Invoke(query, node);

您如何在树中调用
Print
?请出示你的密码。我真的很感激!非常感谢你!