c#扩展方法奇思妙:Enumerable.Cast应用

Enumerable.Cast 用于将IEnumerable转换为泛型版本IEnumerable 。转换后可尽情享用Enumerable的其它方法(如Where、Select),给我们的编码带来极大便利。 但MSDN中仅给出一个转换ArrayList的例子,很多人看了感觉现在都在用List ,还有谁会用ArrayList,Cast 没多少用处,除非处理一些之前遗留的一些代码。 其实Cast 并非如此简单,它可以用在很多地方。 先看MSDN中举的例子吧: 1 System.Collections.ArrayList fruits = new System.Collections.ArrayList(); 2 fruits.Add("apple"); 3 fruits.Add("mango"); 4 5 IEnumerable query = fruits.Cast (); 6 foreach (string fruit in query) Console.WriteLine(fruit); 这个例子比较简单,很容易理解。 同样.Net 1.x中的其它几个集合类也可如上使用,如Array、非泛型版的List... 打断,有没有非泛型版的List?我没太用过.Net 1.x,不太清楚,不过窗体控件中是有个List控件(ASP.Net)和一个ListView控件(WinForm)。 就以ListView为例子吧,ListView控件可以包含很多项,也可以说是一个集合,就让我们来看看它的Items属性吧! 1 public class ListView : Control 2 { 3 4  public ListView.ListViewItemCollection Items { get; } 5 6  public class ListViewItemCollection : IList, ICollection, IEnumerable {  } 7 8 } ListView的Items类型是ListView.ListViewItemCollection,这个ListViewItemCollection实现了IEnumerable。 ListView.Items正是一个非泛型的集合,因此可以应用Cast 。 以下代码假定 listBox 数据绑定在一个Employee的集合上: 1 int count = listBox.Items.Cast ().Count(); 2 bool b = listBox.Items.Cast ().Any(e => e.FirstName == "Bob"); (当然,如果有Employee的集合的引用,就不用Cast了,这里只是示例) 同样Cast 可以用在ComboBox、DataGridView、TreeNode上: 1 //ComboBox 2 var v1 = comboBox.Items.Cast (); 3 //DataGridView 4 var v2 = dataGridView.SelectedRows.Cast (); 5 var v3 = dataGridView.SelectedColumns.Cast (); 6 var v4 = dataGridView.SelectedCells.Cast (); 7 //TreeNode 8 var v5 = treeNode.Nodes.Cast (); 这几个应用中应该第 4 行的应用最多,获取选中行是DataGridView使用最频繁的操作之一。 试看下面代码: 1 //计算平均年龄 2 int age = dataGridView.SelectedRows.Cast ().Average(p=>p.Age); 3 //统计所在城市 4 string[] cities = dataGridView.SelectedRows.Cast ().Select(p => p.City).Distinct(); 用了Cast ,我们的代码很精简。 Cast 甚至还可以用在所有控件的基类Control上,它的Controls属性也是非泛型的! 1 //Control 2 var v6 = control.Controls.Cast ();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值