我有一個叫NTree類:如何使用匿名泛型委託在C#2.0
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);
}
當我嘗試使用匿名委託導線用我得到:
參數「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);
我試圖把「箭頭-parenthisis」一切以匿名委託,但它只是不工作。請幫幫我!
感謝& BR -Matti
什麼是TreeVisitor的聲明? 請注意,您在Traverse中有無限遞歸(不應該將它稱爲TravereInternal?),並且您在遍歷中將_stopTraverse設置爲false兩次,因此TraverseInternal將不會執行任何操作。 – Timores 2010-05-04 07:32:51
@timores:謝謝,都已修復:)我可以修復功能l8r。我需要知道如何用匿名代理來完成。 – 2010-05-04 07:35:09
我們仍然需要看到'TreeVisitor'的聲明 – AakashM 2010-05-04 07:40:38