WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用高级篇七:“树”通用遍历器 阅读

c#扩展方法奇思妙用高级篇七:“树”通用遍历器

 2010-09-30 21:03:57 来源:WEB开发网   
核心提示: 我们要使用另外一个扩展(要调用上面的扩展方法):1publicstaticIEnumerable<T>GetDescendants<TRoot,T>(thisTRootroot,2Func<TRoot,IEnumerable<T>>rootChil

我们要使用另外一个扩展(要调用上面的扩展方法):

 1     public static IEnumerable<T> GetDescendants<TRoot, T>(this TRoot root, 
 2         Func<TRoot, IEnumerable<T>> rootChildSelector,  
 3         Func<T, IEnumerable<T>> childSelector, Predicate<T> filter)
 4     {
 5         foreach (T t in rootChildSelector(root))
 6         {
 7             if (filter == null || filter(t))
 8                 yield return t;
 9             foreach (T child in GetDescendants(t, childSelector, filter))
10                 yield return child;
11         }
12     }

调用代码如下:

1     //获取TreeView中所有以“酒”结尾的树结点             
2     var treeViewNode = treeView1.GetDescendants(
3         treeView => treeView.Nodes.Cast<TreeNode>(),
4         treeNode => treeNode.Nodes.Cast<TreeNode>(),
5         treeNode => treeNode.Text.EndsWith("酒")
6         );

有了这两个扩展,相信能满足大部分“树”的遍历,为了使用方便还可以进行一些重载。

另外,“树”的遍历有 深度优先 和 广度优先,这里只提一下,就不再一一给出示例了。

上一页  1 2 3 

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接