我正在創建一個允許指定根treenode,treenode屬性和值匹配的(遞歸)方法。如何編寫一個將動態搜索treeview的treenodes的方法?
SearchAllTreeNodes(rootNode, Tag, "foo");
在這個例子中,預期的方法將返回TreeNode
其Tag
屬性字符串「foo」匹配。
我不知道如何處理的第二個參數的方法:
public static TreeNode SearchAllTreeNodes(TreeNode rootNode, /* ?? */, string Value)
{
/* ... */
}
如何指定的對象我想檢查哪些特性?此外,是否有推薦的方法來處理多個值類型,或者我應該簡單地爲那些(int,bool)創建一些重載?
編輯:
感謝的答案提供我能夠完成以下方法:
public static TreeNode SearchAllTreeNodes(TreeNodeCollection nodeCollection, Func<TreeNode, bool> match)
{
foreach (TreeNode tn in nodeCollection)
{
if (match(tn)) return tn;
if (tn.Nodes.Count <= 0) continue;
TreeNode f = SearchAllTreeNodes(tn.Nodes, match);
if (f != null) return f;
}
return null;
}
調用,像這樣:
SearchAllTreeNodes(treeView.Nodes, node => node.Tag != null && (string)node.Tag == "foo")
或:
SearchAllTreeNodes(treeView.Nodes, node => node.Tag != null && (int)node.Tag == 42)
同意。您可能還想看看訪客設計模式。 – neontapir 2011-03-17 20:17:22
謝謝,這是完成工作的原因。 [(參考)](http://msdn.microsoft.com/en-us/library/bb549151.aspx)@neontapir感謝您的提示,我一定會了解這種設計模式[(參考)](http: //en.wikipedia.org/wiki/Visitor_pattern)。 – JYelton 2011-03-17 22:18:05