AsEnumerable , OfType , Cast 区别

来源:互联网 发布:淘宝网下载2016新版本 编辑:程序博客网 时间:2024/06/03 23:42


一、Enumerable.AsEnumerable<TSource> 方法

            https://msdn.microsoft.com/zh-cn/library/bb335435%28v=vs.110%29.aspx

            当实现类与基类都有相同的方法时( 基类是实现了 IEnumerable<T> ),要执行基本的方法,用 AsEnumerable 

          

    class AsEnumerableTest<T> : List<T>    {        public void Where(Func<T, bool> func)        {            Console.WriteLine("AsEnumerableTest 的 Where 方法");        }    }        public static void AsEnumerable()        {            AsEnumerableTest<int> q = new AsEnumerableTest<int>() { 1, 2, 3, 4 };            q.Where(r => r < 3);             var v = q.AsEnumerable().Where(r => r < 3);            Console.WriteLine(v.Count());        }

二、Enumerable.OfType<TResult> 方法

            https://msdn.microsoft.com/zh-cn/library/bb360913%28v=vs.110%29.aspx

           此方法是一个延迟执行的方法。只有执行遍历的时候,才会触发具体执行,当出现异常时,将进行忽略;

           例:lsit 集合将有3个对象,会忽略第三个转换失败的对象.

 

            ArrayList array = new ArrayList();            array.Add("a");            array.Add("b");            array.Add(4);            array.Add("c");            List<string> lsit = new List<string>();            foreach (var v in array.OfType<string>())            {                lsit.Add(v);            }

三、Enumerable.Cast<TResult> 方法 

            https://msdn.microsoft.com/zh-cn/library/bb341406%28v=vs.110%29.aspx

           此方法是一个延迟执行的方法。只有执行遍历的时候,才会触发具体执行,当出现异常时,会抛出异常;

           例:在遍历到第三个数据时,将抛出异常。

            ArrayList array = new ArrayList();            array.Add("a");            array.Add("b");            array.Add(4);            array.Add("c");            List<string> lsit = new List<string>();            foreach (var v in array.Cast<string>())            {                lsit.Add(v);            }



0 0
原创粉丝点击