WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用高级篇三:Enumerable.Cast<T>... 阅读

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集合,运行时会报错:

c#扩展方法奇思妙用高级篇三:Enumerable.Cast<T>应用

第7行也会报同样的错误。看来Cast<T>内部并非只是简单转换!

用Reflect反编译了一下,用到了下面这个类:

c#扩展方法奇思妙用高级篇三:Enumerable.Cast<T>应用

反编译后代码比较乱,加上本人水平有限,也没弄明白,还是把这个难题留给园子里的高手吧!

总结:

1. Cast<T>可广泛应用在WinForm的控件上;

2. 有类继承的集合转换上,建议用OfType<T>;

3. Cast<T>不能理解成简单类型转换。

上一页  1 2 3 4 

Tags:扩展 方法 奇思

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