c#扩展方法奇思妙用高级篇七:“树”通用遍历器
2010-09-30 21:03:57 来源:WEB开发网先看一个简单的类People(将作为测试用的例子):
1 public abstract class People
2 {
3 public bool IsMale { get; private set; }
4 public abstract IEnumerable<People> Children { get; }
5 }
People类有一个Children属性,返回该People的所有孩子。People类通过Children属性最终可形成一个People树。
“树”的通用遍历扩展参照如下:
1 public static IEnumerable<T> GetDescendants<T>(this T root,
2 Func<T, IEnumerable<T>> childSelector, Predicate<T> filter)
3 {
4 foreach (T t in childSelector(root))
5 {
6 if (filter == null || filter(t))
7 yield return t;
8 foreach (T child in GetDescendants((T)t, childSelector, filter))
9 yield return child;
10 }
11 }
使用People类,写出几个调用示例:
1 People people;
2 //
3 //获取所有子孙
4 var descendants = people.GetDescendants(p => p.Children, null);
5 //获取所有男性子孙
6 var males = people.GetDescendants(p => p.Children, p => p.IsMale);
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接