AsEnumerable , OfType , Cast 区别

本文详细介绍了LINQ中Enumerable.AsEnumerable<TSource>、OfType<TResult>和Cast<TResult>三个方法的用途和区别。AsEnumerable用于在基类实现IEnumerable<T>时执行基本方法;OfType仅保留集合中指定类型的对象;而Cast则尝试将所有元素转换为目标类型,遇到无法转换的元素会抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、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);
            }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值