c# - 如何在 C# 2.0 中使用匿名泛型委托(delegate)

标签 c# generics c#-2.0 anonymous-delegates

我有一个名为 NTree 的类:

class NTree<T>
{

    delegate bool TreeVisitor<T>(T nodeData);

    public NTree(T data)
    {
        this.data = data;
        children = new List<NTree<T>>();
        _stopTraverse = false;
    }

        ...

    public void Traverse(NTree<T> node, TreeVisitor<T> visitor)
    {
        try
        {
            _stopTraverse = false;
            TraverseInternal(node, visitor);
        }
        finally
        {
            _stopTraverse = false;
        }
    }

    private void TraverseInternal(NTree<T> node, TreeVisitor<T> visitor)
    {
        if (_stopTraverse)
            return;

        if (!visitor(node.data))
        {
            _stopTraverse = true;
        }
        foreach (NTree<T> kid in node.children)
            TraverseInternal(kid, visitor);
    }

当我尝试将 Traverse 与匿名委托(delegate)一起使用时,我得到:

参数“2”:无法从“匿名方法”转换为“NisConverter.TreeVisitor”

代码:

tTable srcTable = new tTable();
DataRow[] rows;
rootTree.Traverse(rootTree, delegate(TableRows tr)
    {
        if (tr.TableName == srcTable.mappingname)
        {
            rows = tr.Rows;
            return false;
        }
    });

但是这不会产生错误:

    static bool TableFinder<TableRows>(TableRows tr)
    {
        return true;
    }

...

rootTree.Traverse(rootTree, TableFinder);

我尝试将“arrowhead-parenthisis”和所有内容都交给匿名委托(delegate),但它不起作用。请帮助我!

谢谢和 BR -Matti

最佳答案

您发布的匿名委托(delegate)缺少 bool 值的返回(当 true 防护为 if(...) 时,最有可能是值 false 。因此,它的签名实际上是 void (TableRow) 而不是 bool (TableRow) ,并且编译器无法进行转换。

所以语法应该是:

tTable srcTable = new tTable();  DataRow[] rows;  rootTree.Traverse(rootTree, delegate(TableRows tr) 
    { 
        if (tr.TableName == srcTable.mappingname) 
        { 
            rows = tr.Rows; 
            return false; 
        } 
        return true;
    });

关于c# - 如何在 C# 2.0 中使用匿名泛型委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763497/

相关文章:

c# - 打印出 List<byte> 作为字符串值

c# - 如何从 C# 作为 MT4 dll 连接到 Mysql?

c# - .NET 泛型 - 比较两个列表并过滤 : best practice

c# - 如何在 C# 中获取从一条路径到另一条路径的相对路径

java - 创建我自己的增强 for 循环

java通配符类型安全警告

.net - .NET 的简单事件总线

c# - 使用 nunit 测试属性是否抛出异常

c# - 获得焦点时突出显示 WPF 控件

c# - 使用 XDocument.Parse 时保留回车