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

Linq的简介(一)

时间:2020-04-11 09:32:55      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:res   int   假设   string   alt   ever   lap   play   join   

一、为什么要使用LINQ

假设有一个整数类型的数组,找到里面的偶数并进行降序排序。

在C#2.0以前,如果要实现这样的功能,我们必须使用‘foreach‘或‘for‘循环来遍历数组,先找到偶数然后在降序排序,相关代码如下:

技术图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqOfSelectOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            // 查询出数组中的偶数并排序
            int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
            // 定义一个整数类型的集合,用来存放数组中的偶数
            List<int> list = new List<int>();
            // 遍历数组查询出偶数放到集合中
            foreach (int i in ints)
            {
                // 如果是偶数,把偶数加入到集合中
                if (i % 2 == 0)
                {
                    list.Add(i);
                }
            }

            // 正序排序
            list.Sort();
            // 反转
            list.Reverse();
            // 输出
            Console.WriteLine(string.Join(",", list)); //66,32,4,2,0
            Console.ReadKey();
        }
    }
}
View Code

使用for循环很麻烦,而且不可维护和可读。C#2.0引入了delegate,可以使用委托来处理这种场景,代码如下所示:

技术图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqOfSelectOperation
{
    //定义委托
    delegate bool FindEven(int item);

    class IntExtension
    {
        public static List<int> where(int[] array, FindEven del)
        {
            List<int> result = new List<int>();
            foreach (int item in array)
            {
                if (del(item))
                {
                    result.Add(item);
                }
            }
            return result;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // 查询出数组中的偶数并排序
            int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };

            //delegate(int item){return item % 2 == 0;} 表示委托的实现
            List<int> list = IntExtension.where(ints, delegate(int item)
            {
                return item % 2 == 0;
            });

            // 正序排序
            list.Sort();
            // 反转
            list.Reverse();
            // 输出
            Console.WriteLine(string.Join(",", list)); //66,32,4,2,0
            Console.ReadKey();
        }
    }
}
View Code

 

Linq的简介(一)

标签:res   int   假设   string   alt   ever   lap   play   join   

原文地址:https://www.cnblogs.com/LuckyZLi/p/12677721.html

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