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

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

 2010-09-30 21:03:57 来源:WEB开发网   
核心提示: 当然,还有另外一种情况,c#扩展方法奇思妙用高级篇七:“树”通用遍历器(2),只获取本族人的子孙(子孙中的女性嫁出,不包括她们的子孙),WinForm中的TreeView就不同了:TreeView(根)包含多个TreeNode(子孙),每个TreeNode也可包含多个TreeNode(子孙),这

当然,还有另外一种情况,只获取本族人的子孙(子孙中的女性嫁出,不包括她们的子孙),这种情况稍复杂些,本文更侧重想法,不再给出示例代码(哪们朋友实现了,可发在回复中)。

既然是通用的,我们就将它用在WinForm中作为选择器试试吧:

1     //Form1.cs
2     //获取本窗体所有控件
3     var controls = (this as Control).GetDescendants(c => c.Controls.Cast<Control>(), null);
4     //获取所有选中的CheckBox
5     var checkBoxes = (this as Control).GetDescendants(
6             c => c.Controls.Cast<Control>(),
7             c => (c is CheckBox) && (c as CheckBox).Checked
8         )
9         .Cast<CheckBox>();

通用的方法写起来肯定没有专用的优雅,用了多处 is/as 和 Cast,主要因为这里涉及到继承,而且Control.Controls属性的类型ControlCollection不是泛型集合。

以上两个例子比较相似:树结构中“根”与“子孙”类型相同(或具有相同的基类),WinForm中的TreeView就不同了:TreeView(根)包含多个TreeNode(子孙),每个TreeNode也可包含多个TreeNode(子孙),“根”与“子孙”类型不同(也没有相同的基类),如下图:

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

Tags:扩展 方法 奇思

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