码迷,mamicode.com
首页 > 其他好文 > 详细

LINQ学习系列-----3.1 查询非泛型集合

时间:2017-12-10 12:45:42      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:sel   font   返回   解析   col   集合   代码   linq   --   

 

一.问题起源

     LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典、数组、List<T>等,但是对于继承了IEnumerable的非泛型集合如何处理,例如ArrayList。

二.解决办法

     上源码:

            ArrayList mArrayList = new ArrayList() {"222","1dsadsad","12w1212","1212e12esadq" };
            var query = from m in mArrayList.Cast<string>()
                        where m.Length > 3
                        select m;
            foreach (var item in query)
            {
                Console.WriteLine(item.ToString());
            }
            Console.Read();

       Cast操作符是解决此问题的关键。

             public static IEnumerable<T> Cast<T>( this IEnumerable source);

       解析:

              1.从上述代码可以看出,Cast是一个扩展的方法,返回值是IEumerable<T>,Cast的原对象是IEnumerable,针对实现了IEnumerable接口的对象进行扩展。

              2.Cast操作符将源序列中的每个元素转型为某一指定的类型:T

              3.Cast操作符通过一次遍历源序列中的元素来返回一个可被枚举的对象,当其他代码开始遍历Cast操作的返回结果时,Cast操作符同时开始遍历源序列,转换为T类型,依次返回。

三.OfType

       除了Cast操作符之外,我们还可以使用OfType操作符,差别在于OfType操作符只会返回源序列中属于某种特定类型的元素,例如:

               ArrayList中同时包含有Book和Student两种不同的类型的对象时,调用ArrayList.OfType<Book>() 将只会返回Book对象。

 

本文为学习《LINQ实战》总结。

LINQ学习系列-----3.1 查询非泛型集合

标签:sel   font   返回   解析   col   集合   代码   linq   --   

原文地址:http://www.cnblogs.com/xiaowangzi1987/p/8016457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!