在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Enumerable.Cast<T>用于将IEnumerable转换为泛型版本IEnumerable<T>。转换后可尽情享用Enumerable的其它方法(如Where、Select),给我们的编码带来极大便利。
1 System.Collections.ArrayList fruits = new System.Collections.ArrayList();
2 fruits.Add("apple"); 3 fruits.Add("mango"); 4 5 IEnumerable<string> query = fruits.Cast<string>(); 6 foreach (string fruit in query) Console.WriteLine(fruit); 这个例子比较简单,很容易理解。
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。
1 int count = listBox.Items.Cast<Employee>().Count();
2 bool b = listBox.Items.Cast<Employee>().Any(e => e.FirstName == "Bob"); (当然,如果有Employee的集合的引用,就不用Cast了,这里只是示例)
1 //ComboBox
2 var v1 = comboBox.Items.Cast<People>(); 3 //DataGridView 4 var v2 = dataGridView.SelectedRows.Cast<DataGridViewRow>(); 5 var v3 = dataGridView.SelectedColumns.Cast<DataGridViewColumn>(); 6 var v4 = dataGridView.SelectedCells.Cast<DataGridViewCell>(); 7 //TreeNode 8 var v5 = treeNode.Nodes.Cast<TreeNode>(); 这几个应用中应该第 4 行的应用最多,获取选中行是DataGridView使用最频繁的操作之一。
1 //计算平均年龄
2 int age = dataGridView.SelectedRows.Cast<Employee>().Average(p=>p.Age); 3 //统计所在城市 4 string[] cities = dataGridView.SelectedRows.Cast<Employee>().Select(p => p.City).Distinct(); 用了Cast<T>,我们的代码很精简。
1 //Control
2 var v6 = control.Controls.Cast<Control>(); 看来Cast<T>好像是为 Control 准备,Control 类和Control 的派生类多处使用了非泛型。
1 public class A { }
2 public class B : A { } 来试试如下类型转换操作:
1 //子类集合
2 B[] bb = new B[] { new B(), new B(), new B(), new B() }; 3 //转换成父类 4 A[] aa = bb.Cast<A>().ToArray(); 5 //再转回子类 6 B[] bb2 = aa.Cast<B>().ToArray(); 以上三个操作都可编译并运行通过,修改下再试:
1 A[] aa = new A[] { new A(), new A(), new B() };
2 B[] bb3 = aa2.Cast<B>().ToArray(); 这次不行了,将父类cast为子类可不是随意的:
1 B[] bb = aa.OfType<B>().ToArray();
1 int i = (int)1.001;
2 double d = (double)10; 3 |
请发表评论