【发布时间】:2010-05-04 07:17:43
【问题描述】:
我有一个名为 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 与匿名委托一起使用时,我得到:
参数“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);
我试图将“箭头括号”和所有内容都放在匿名委托中,但它不起作用。请帮帮我!
谢谢和BR-马蒂
【问题讨论】:
-
TreeVisitor 的声明是什么?请注意,您在 Traverse 中有无限递归(不应该调用 TravereInternal 吗?)并且您在 Traverse 中将 _stopTraverse 设置为 false 两次,因此 TraverseInternal 不会做任何事情。
-
@timores:谢谢,两者都已修复 :) 我可以修复 l8r 的功能。我需要知道如何使用匿名委托。
-
我们还需要看
TreeVisitor的声明 -
@Aakas:我在 10 分钟前更新了它。有什么问题吗?我在课堂上看到了它的最高声明:)
标签: c# generics c#-2.0 anonymous-delegates