c#扩展方法奇思妙用高级篇三:Enumerable.Cast<T>应用
2010-09-30 20:50:58 来源:WEB开发网核心提示: 不过我们有解决办法,我们使用Enumerable.OfType<T>,c#扩展方法奇思妙用高级篇三:Enumerable.Cast<T>应用(4),是Cast<T>的亲兄弟,如下使用:1 B[] bb = aa.OfType<B>().ToArra
不过我们有解决办法,我们使用Enumerable.OfType<T>,是Cast<T>的亲兄弟,如下使用:
1 B[] bb = aa.OfType<B>().ToArray();
看了上面的,总感觉Cast<T>的内部只是执行了(T)enumerator.Current这样一个简单操作,让我们再用 int 和 double 转换验证一下:
1 int i = (int)1.001;
2 double d = (double)10;
3
4 int[] ints1 = new int[] { 1, 2, 3, 4, 5 };
5 double[] ds1 = ints1.Cast<double>().ToArray();
6
7 double[] nums1 = new double[] { 1.0001, 2.0003, 3.001, 3.9997, 4.002 };
8 int[] nums2 = nums1.Cast<int>().ToArray();
1、2行为强制类型转换,没问题。(当然第2行的(double)可以省略。)
第 5 行试图将整数集合转换为double集合,运行时会报错:
第7行也会报同样的错误。看来Cast<T>内部并非只是简单转换!
用Reflect反编译了一下,用到了下面这个类:
反编译后代码比较乱,加上本人水平有限,也没弄明白,还是把这个难题留给园子里的高手吧!
总结:
1. Cast<T>可广泛应用在WinForm的控件上;
2. 有类继承的集合转换上,建议用OfType<T>;
3. Cast<T>不能理解成简单类型转换。
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接