我有一个名为 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/