欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# Linq查詢?cè)斀?/h1>
 更新時(shí)間:2021年04月13日 09:04:33   作者:DullFish  
這篇文章主要介紹了c# Linq查詢的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

c#提供的ling查詢極大的遍歷了集合的查詢過(guò)程,且使用簡(jiǎn)單方便,非常的有用。

下面將分別用簡(jiǎn)單的例子說(shuō)明:ling基本查詢、延遲查詢屬性、類型篩選、復(fù)合from字句、多級(jí)排序、分組查詢、聯(lián)合查詢、合并、分頁(yè)、聚合操作符、并行l(wèi)inq、取消長(zhǎng)時(shí)間運(yùn)行的并行l(wèi)ing查詢。

Lambda表達(dá)式簡(jiǎn)介:

/*Lambda表達(dá)式:Lambda 表達(dá)式是一種可用于創(chuàng)建委托或表達(dá)式目錄樹(shù)類型的匿名函數(shù)
             表達(dá)式位于 => 運(yùn)算符右側(cè)的 lambda 表達(dá)式稱為“表達(dá)式 lambda”。
             * (input parameters) => expression 
             * 示例:*/
              delegate int del(int i);  
              static void Main(string[] args)
              { 
                   del myDelegate = x => x * x;  
                   int j = myDelegate(5); //最后j = 25  
               }

基本查詢

語(yǔ)句:

 var query = from r in listStudents where r.score < 60 orderby r.score descending select r;
 //var q2 = listStudents.Where(r => r.score < 60).OrderByDescending(r => r.score).Select(r => r) ;//或使用Lambda表達(dá)式

例子:

/// <summary>
        /// 學(xué)生結(jié)構(gòu)體
        /// </summary>
        struct Student
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public string name;
            /// <summary>
            /// 年齡
            /// </summary>
            public int age;
            /// <summary>
            /// 班號(hào)
            /// </summary>
            public int grade;
            /// <summary>
            /// 分?jǐn)?shù)
            /// </summary>
            public float score;
        }
/// <summary>
        /// linq
        /// 基本查詢
        /// </summary>
        static void Linq1()
        {
            #region 構(gòu)造查詢數(shù)據(jù)
            List<Student> listStudents = new List<Student>();
            Random pRandom = new Random();
            for (int i = 1; i < 50; i++)
            {
                float sc = pRandom.Next(0, 100);
                int age = pRandom.Next(8, 13);
                int gde = pRandom.Next(1, 6);

                string name = "";
                switch (pRandom.Next(0, 6))
                {
                    case 1: name = "周xxx"; break;
                    case 2: name = "李xxx"; break;
                    case 3: name = "孫xxx"; break;
                    case 4: name = "錢xxx"; break;
                    default: name = "趙xxx"; break;
                }

                Student psdt = new Student();
                psdt.name = name;
                psdt.age = age;
                psdt.grade = gde;
                psdt.score = sc;
                listStudents.Add(psdt);
            }
            #endregion
            //從50個(gè)學(xué)生中選擇出不及格的人員名單并按分?jǐn)?shù)降序排列
            var query = from r in listStudents where r.score < 60 orderby r.score descending select r;
            //var q2 = listStudents.Where(r => r.score < 60).OrderByDescending(r => r.score).Select(r => r) ;//或使用Lambda表達(dá)式
            //orderby升序即從小到大,orderby r.score descending降序即從大到小

            Console.WriteLine("不及格的人員名單:");
            foreach (Student st in query)
            {
                Console.WriteLine("***************");
                Console.WriteLine("姓名:"+st.name);
                Console.WriteLine("班級(jí):"+st.grade);
                Console.WriteLine("年齡:"+st.age);
                Console.WriteLine("分?jǐn)?shù):"+st.score);
            }
            Console.ReadKey();
        }

延遲查詢屬性

linq查詢?yōu)檠舆t查詢,只需構(gòu)造一次查詢語(yǔ)句,可以多次使用。

例子:

/// <summary>
        /// Linq
        /// 延遲查詢
        /// linq查詢?yōu)檠舆t查詢,只需構(gòu)造一次查詢語(yǔ)句,可以多次使用
        /// </summary>
        static void Linq2()
        {
            #region 構(gòu)造查詢數(shù)據(jù)
            List<string> lists = new List<string> { "Jack","Pet","Hant","Li","Kkk"};
            
            #endregion
            var query = from r in lists where r.StartsWith("J") select r;
            Console.WriteLine("第一次查詢結(jié)果:");
            foreach (string st in query)
            {
                Console.WriteLine( st);
            }

            Console.WriteLine("第二次查詢結(jié)果:");
            lists.Add("Jone");
            lists.Add("Jimi");
            lists.Add("Johu");
            foreach (string st in query)
            {
                Console.WriteLine(st);
            }

            Console.ReadKey();
            /*
             輸出結(jié)果:
             * 第一次:Jack
             * 第二次:Jack Jone Jimi Johu
             */
        }

類型篩選

利用OfType方法可以把特定類型數(shù)據(jù)篩選出來(lái)。

例子

/// <summary>
        /// Linq類型篩選-ofType
        /// </summary>
        static void Linq3()
        {
            object[] pList = new object[] { 1,"one",2,"two",3,"three"};
            var query = pList.OfType<string>();
            foreach (var st in query)
            {
                Console.WriteLine(st);
            }
            Console.ReadKey();
            /*
            輸出結(jié)果:
            * one two three
            */
        }

復(fù)合from子句

語(yǔ)句:

 var query = from s in listStudents 
                        from n in s.name 
                        where n == '趙' orderby s.score descending 
                        select s.grade + "班-" + s.name + ",分?jǐn)?shù)" + +s.score;
            /*查詢出所有姓趙的學(xué)生的班級(jí)、姓名、分?jǐn)?shù)信息,并按分?jǐn)?shù)由高到低排序*/

例子:

/// <summary>
        /// linq復(fù)合from字句
        /// </summary>
        static void Linq4()
        {
            #region 構(gòu)造查詢數(shù)據(jù)
            List<Student> listStudents = new List<Student>();
            Random pRandom = new Random();
            for (int i = 1; i < 50; i++)
            {
                float sc = pRandom.Next(0, 100);
                int age = pRandom.Next(8, 13);
                int gde = pRandom.Next(1, 6);

                string name = "";
                switch (pRandom.Next(0, 6))
                {
                    case 1: name = "周xxx"; break;
                    case 2: name = "李xxx"; break;
                    case 3: name = "孫xxx"; break;
                    case 4: name = "錢xxx"; break;
                    default: name = "趙xxx"; break;
                }

                Student psdt = new Student();
                psdt.name = name;
                psdt.age = age;
                psdt.grade = gde;
                psdt.score = sc;
                listStudents.Add(psdt);
            }
            #endregion
            var query = from s in listStudents 
                        from n in s.name 
                        where n == '趙' orderby s.score descending 
                        select s.grade + "班-" + s.name + ",分?jǐn)?shù)" + +s.score;
            /*查詢出所有姓趙的學(xué)生的班級(jí)、姓名、分?jǐn)?shù)信息,并按分?jǐn)?shù)由高到低排序*/
            foreach (var t in query)
            {
                Console.WriteLine(t);
            }
            Console.ReadKey();
        }

多級(jí)排序

語(yǔ)句:

 //參數(shù)越靠前,優(yōu)先級(jí)越高
            //先按score排序,當(dāng)分?jǐn)?shù)相同時(shí)再按grade排序...依次類推
            var query = from s in listStudents orderby s.score, s.grade, s.age, s.name select s;

例子:

/// <summary>
        /// 多級(jí)排序
        /// </summary>
        static void Linq5()
        {
            #region 構(gòu)造查詢數(shù)據(jù)
            List<Student> listStudents = new List<Student>();
            Random pRandom = new Random();
            for (int i = 1; i < 50; i++)
            {
                float sc = pRandom.Next(0, 100);
                int age = pRandom.Next(8, 13);
                int gde = pRandom.Next(1, 6);

                string name = "";
                switch (pRandom.Next(0, 6))
                {
                    case 1: name = "周xxx"; break;
                    case 2: name = "李xxx"; break;
                    case 3: name = "孫xxx"; break;
                    case 4: name = "錢xxx"; break;
                    default: name = "趙xxx"; break;
                }

                Student psdt = new Student();
                psdt.name = name;
                psdt.age = age;
                psdt.grade = gde;
                psdt.score = sc;
                listStudents.Add(psdt);
            }
            #endregion
            //參數(shù)越靠前,優(yōu)先級(jí)越高
            //先按score排序,當(dāng)分?jǐn)?shù)相同時(shí)再按grade排序...依次類推
            var query = from s in listStudents orderby s.score, s.grade, s.age, s.name select s;
            foreach (Student st in query)
            {
                Console.WriteLine("***************");
                Console.WriteLine("姓名:" + st.name);
                Console.WriteLine("班級(jí):" + st.grade);
                Console.WriteLine("年齡:" + st.age);
                Console.WriteLine("分?jǐn)?shù):" + st.score);
            }
            Console.ReadKey();
        }

分組

語(yǔ)句:

//按國(guó)家分組,并選出大于2的組,形成新的集合
            var query = from r in listChampion
                        group r by r.country into g
                        orderby g.Count() descending, g.Key
                        where g.Count() >= 2
                        select
                            new { country = g.Key, count = g.Count() };

例子:

/// <summary>
        /// 分組
        /// </summary>
        static void Linq6()
        {
            List<Champions> listChampion = new List<Champions>();
            listChampion.Add(new Champions() { name = "張**", country = "中國(guó)" });
            listChampion.Add(new Champions() { name = "趙**", country = "中國(guó)" });
            listChampion.Add(new Champions() { name = "李**", country = "中國(guó)" });
             listChampion.Add(new Champions() { name = "李**", country = "中國(guó)" });
            listChampion.Add(new Champions() { name = "Peter", country = "美國(guó)" });
            listChampion.Add(new Champions() { name = "Hune", country = "美國(guó)" });
              listChampion.Add(new Champions() { name = "Hune", country = "美國(guó)" });
            listChampion.Add(new Champions() { name = "Jack", country = "俄羅斯" });
              listChampion.Add(new Champions() { name = "Jack", country = "俄羅斯" });
            listChampion.Add(new Champions() { name = "Jimi", country = "英國(guó)" });
            //按國(guó)家分組,并選出大于2的組,形成新的集合
            var query = from r in listChampion
                        group r by r.country into g
                        orderby g.Count() descending, g.Key
                        where g.Count() >= 2
                        select
                            new { country = g.Key, count = g.Count() };
            foreach (var o in query)
            {
                Console.WriteLine("國(guó)家:{0},冠軍數(shù):{1}個(gè)", o.country, o.count);
            }
            Console.ReadKey();
        }

聯(lián)合查詢-join

語(yǔ)句:

//查詢出集合qSt中year等于集合qSc中year的元素并形成新的集合
            var qjoin = from r in qSt 
                        join c in qSc 
                        on r.year equals c.year 
                        select new 
                        {
                            Year = r.year, 
                            stName = r.name,
                            scName = c.name 
                        };

例子:

/// <summary>
        /// 聯(lián)合查詢-join
        /// </summary>
        static void Linq7()
        {
            List<s> pSt = new List<s>();
            pSt.Add(new s() {year=1999,name="xxx" });
            pSt.Add(new s() { year = 2000, name = "xxx" });
            pSt.Add(new s() { year = 2001, name = "xxx" });
            pSt.Add(new s() { year = 2010, name = "xxx" });
            List<school> pSc = new List<school>();
            pSc.Add(new school() { year = 1999, name = "***" });
             pSc.Add(new school() { year = 2001, name = "***" });
            pSc.Add(new school() { year = 2002, name = "***" });
            pSc.Add(new school() { year = 2010, name = "***" });
            pSc.Add(new school() { year = 2012, name = "***" });

            var qSt = from r in pSt where r.year >= 2000 select r;
            var qSc = from r in pSc where r.year >= 2000 select r;

            //查詢出集合qSt中year等于集合qSc中year的元素并形成新的集合
            var qjoin = from r in qSt 
                        join c in qSc 
                        on r.year equals c.year 
                        select new 
                        {
                            Year = r.year, 
                            stName = r.name,
                            scName = c.name 
                        };

            foreach (var ite in qjoin)
            {
                Console.WriteLine(ite.Year + " " + ite.scName + " " + ite.stName);
                Console.WriteLine("");
            }
            Console.ReadKey();
        }

合并-zip()

.Net4.0新增,可對(duì)兩個(gè)相關(guān)的序列進(jìn)行合并。

語(yǔ)句:

  /*若合并兩項(xiàng)項(xiàng)數(shù)不同,則在達(dá)到較小集合的末尾時(shí)停止*/
            var qZip = qSc.Zip(qSt, (first, second) =>string.Format("Year:{0},Name:{1}.", first.Year,second.Name));//返回值qZip為字符串集合

例子:

/// <summary>
        /// 合并-zip()-.Net4.0新增,可對(duì)兩個(gè)相關(guān)的序列進(jìn)行合并
        /// </summary>
        static void Linq8()
        {
            List<s> pSt = new List<s>();
            pSt.Add(new s() { year = 1999, name = "一xxx" });
            pSt.Add(new s() { year = 2000, name = "二xxx" });
            pSt.Add(new s() { year = 2001, name = "三xxx" });
            pSt.Add(new s() { year = 2010, name = "四xxx" });
            pSt.Add(new s() { year = 2010, name = "五xxx" });
            List<school> pSc = new List<school>();
            pSc.Add(new school() { year = 1999, name = "1***" });
            pSc.Add(new school() { year = 2012, name = "2***" });
            pSc.Add(new school() { year = 2012, name = "3***" });
            pSc.Add(new school() { year = 2012, name = "4***" });
            pSc.Add(new school() { year = 2012, name = "5***" });

            var qSt = from r in pSt where r.year >= 2000 orderby r.year select new { Year = r.year, Name = r.name };
            var qSc = from r in pSc where r.year >= 2000 orderby r.year select new { Year = r.year, Name = r.name };
            /*若合并兩項(xiàng)項(xiàng)數(shù)不同,則在達(dá)到較小集合的末尾時(shí)停止*/
            var qZip = qSc.Zip(qSt, (first, second) =>string.Format("Year:{0},Name:{1}.", first.Year,second.Name));//返回值qZip為字符串集合
           
            foreach (var ite in qZip)
            {
                Console.WriteLine(ite);
            }
            Console.ReadKey();

        }

分區(qū)(分頁(yè))

通過(guò)Take()和Skip()實(shí)現(xiàn)只顯示部分查詢結(jié)果。

語(yǔ)句:

 //通過(guò)skip跳過(guò)指定數(shù)量的元素,再通過(guò)take提取固定長(zhǎng)度元素,可實(shí)現(xiàn)分頁(yè)
                var qr = (from r in listStudents orderby r.score descending select r).Skip(i * pageSize).Take(5);
                //var qr2 = listStudents.OrderByDescending(r => r.score).Select(r => r).Skip(i * pageSize).Take(5);//或

例子

/// <summary>
        /// 分區(qū)(分頁(yè))-通過(guò)Take()和Skip()實(shí)現(xiàn)只顯示部分查詢結(jié)果
        /// </summary>
        static void Linq9()
        {
            #region 構(gòu)造查詢數(shù)據(jù)
            List<Student> listStudents = new List<Student>();
            Random pRandom = new Random();
            for (int i = 1; i < 50; i++)
            {
                float sc = pRandom.Next(0, 100);
                int age = pRandom.Next(8, 13);
                int gde = pRandom.Next(1, 6);

                string name = "";
                switch (pRandom.Next(0, 6))
                {
                    case 1: name = "周xxx"; break;
                    case 2: name = "李xxx"; break;
                    case 3: name = "孫xxx"; break;
                    case 4: name = "錢xxx"; break;
                    default: name = "趙xxx"; break;
                }

                Student psdt = new Student();
                psdt.name = name;
                psdt.age = age;
                psdt.grade = gde;
                psdt.score = sc;
                listStudents.Add(psdt);
            }
            #endregion

            int pageSize = 5;
            int numofPage = (int)Math.Ceiling(listStudents.Count /(double)pageSize);

            for (int i = 0; i < numofPage; i++)
            {
                Console.WriteLine("第{0}頁(yè)", i);

                //通過(guò)skip跳過(guò)指定數(shù)量的元素,再通過(guò)take提取固定長(zhǎng)度元素,可實(shí)現(xiàn)分頁(yè)
                var qr = (from r in listStudents orderby r.score descending select r).Skip(i * pageSize).Take(5);
                //var qr2 = listStudents.OrderByDescending(r => r.score).Select(r => r).Skip(i * pageSize).Take(5);//或
                foreach (var ite in qr)
                {
                    Console.WriteLine(ite.name);
                    Console.WriteLine(ite.score);
                }
                Console.WriteLine("");
            }
            Console.ReadKey();
        }

并行l(wèi)inq

并行查詢可以分解查詢的工作,使其分布在多個(gè)線程上。當(dāng)pc擁有多個(gè)cpu時(shí),可以看到并行查詢帶來(lái)的改進(jìn)效果。并行LINQ適用于大型的集合查詢,并擁有一定的優(yōu)勢(shì)。使用

System.Collections.Concurrent.Partitioner.Create
可以手動(dòng)創(chuàng)建分區(qū)器。
語(yǔ)法:

var sum2 = (from x2 in data.AsParallel() where x2 > 20 select x2).Sum();//并行查詢

//var sum3 = data.AsParallel().Where(x3 => x3 > 20).Sum();//或并行查詢(Lambda表達(dá)式)

例子:

/// <summary>
        /// 并行l(wèi)inq
        /// </summary>
        static void Linq11()
        {
            Console.WriteLine("開(kāi)始構(gòu)造大數(shù)組...");
            //構(gòu)造大數(shù)組
            const int count = 100000000;
            var data = new int[count];
            var r = new Random();
            for (int i = 0; i < count; i++)
            {
                data[i] = r.Next(40);
            }
            Console.WriteLine("開(kāi)始計(jì)算...");
            var st = System.DateTime.Now;
            var sum = (from x in data where x > 20 select x).Sum();//常規(guī)linq-耗時(shí)1.8641s
            var st2 = System.DateTime.Now;
            var sum2 = (from x2 in data.AsParallel() where x2 > 20 select x2).Sum();//并行查詢-耗時(shí)0.6620s

            //var sum3 = data.AsParallel().Where(x3 => x3 > 20).Sum();//或并行查詢----x3 => x3 > 20(Lambda表達(dá)式)
            var st3 = System.DateTime.Now;

            /*Partitioner.Create
             手動(dòng)創(chuàng)建分區(qū)器
             * Create具有多個(gè)重載,可依據(jù)需求進(jìn)行分區(qū)
             */
            var sum4 = (from c in System.Collections.Concurrent.Partitioner.Create(data, true).AsParallel() where c > 20 select c).Sum();

            var dt1 = st2 - st;
            var dt2 = st3 - st2;
            Console.WriteLine("常規(guī)linq耗時(shí):{0}s",dt1.TotalSeconds.ToString());
            Console.WriteLine("并行l(wèi)inq耗時(shí):{0}s", dt2.TotalSeconds.ToString());
            Console.ReadKey();
        }

輸出結(jié)果:

可以粗魯?shù)恼J(rèn)為并行l(wèi)inq對(duì)于大集合的查詢是優(yōu)勢(shì)比較明顯的。

取消長(zhǎng)時(shí)間運(yùn)行的并行l(wèi)inq查詢

對(duì)于并行l(wèi)ing而言,可以設(shè)置可以利用System.Threading.CancellationTokenSource設(shè)置取消操作。

語(yǔ)法:

 //通過(guò).WithCancellation(cts.Token)設(shè)置
                    var sum = (from x in data.AsParallel().WithCancellation(cts.Token) where x < 20 select x).Average();

例子:

/// <summary>
        /// 取消長(zhǎng)時(shí)間運(yùn)行的并行l(wèi)inq查詢
        /// </summary>
        static void Linq12()
        {
            //構(gòu)造大數(shù)組
            const int count = 100000000;
            var data = new int[count];
            var r = new Random();
            for (int i = 0; i < count; i++)
            {
                data[i] = r.Next(40);
            }

            var cts = new System.Threading.CancellationTokenSource();

            new System.Threading.Thread(() =>
            {
                try
                {
                    //通過(guò).WithCancellation(cts.Token)設(shè)置
                    var sum = (from x in data.AsParallel().WithCancellation(cts.Token) where x < 20 select x).Average();
                    Console.WriteLine("sum:{0}", sum);
                }
                catch(OperationCanceledException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }).Start();

            Console.WriteLine("計(jì)算開(kāi)始...");
            Console.WriteLine("取消請(qǐng)按n!");
            var rk = Console.Read();
            if(rk=='n'||rk=='N')
            {
                cts.Cancel();
            }

        }

至此,對(duì)于LINQ已經(jīng)有了一個(gè)基本的了解。

以上就是c# Linq查詢?cè)斀獾脑敿?xì)內(nèi)容,更多關(guān)于c# Linq查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#窗體布局方式詳解

    C#窗體布局方式詳解

    這篇文章主要介紹了C#窗體布局方式詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 帶你一文了解C#中的LINQ

    帶你一文了解C#中的LINQ

    c#提供的ling查詢極大的遍歷了集合的查詢過(guò)程,且使用簡(jiǎn)單方便,非常的有用,下面這篇文章主要給大家介紹了關(guān)于C#中LINQ的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • 基于C#對(duì)用戶密碼使用MD5加密與解密

    基于C#對(duì)用戶密碼使用MD5加密與解密

    C#中常涉及到對(duì)用戶密碼的加密于解密的算法,其中使用MD5加密是最常見(jiàn)的的實(shí)現(xiàn)方式。本文總結(jié)了通用的算法并結(jié)合了自己的一點(diǎn)小經(jīng)驗(yàn),分享給大家
    2015-12-12
  • 雅虎公司C#筆試題(后半部份才是)

    雅虎公司C#筆試題(后半部份才是)

    雅虎公司C#筆試題(后半部份才是)...
    2007-04-04
  • 詳解C#App.config和Web.config加密

    詳解C#App.config和Web.config加密

    本篇文章給大家分享了C#App.config和Web.config加密的相關(guān)知識(shí)點(diǎn)以及具體代碼步驟,有興趣的朋友參考學(xué)習(xí)下。
    2018-05-05
  • C#Js時(shí)間格式化問(wèn)題簡(jiǎn)單實(shí)例

    C#Js時(shí)間格式化問(wèn)題簡(jiǎn)單實(shí)例

    這篇文章介紹了C#Js時(shí)間格式化問(wèn)題簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-10-10
  • 基于WPF實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音頻播放動(dòng)畫控件

    基于WPF實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音頻播放動(dòng)畫控件

    這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音頻播放動(dòng)畫控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • 對(duì)C# 多態(tài)的理解

    對(duì)C# 多態(tài)的理解

    這篇文章主要介紹了對(duì)C# 多態(tài)的理解,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C#獲取本機(jī)IP地址(ipv4)

    C#獲取本機(jī)IP地址(ipv4)

    本文主要介紹了C#獲取本機(jī)所有IP地址的方法、C#獲取本機(jī)IP地址(ipv4)的方法等。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • C#實(shí)現(xiàn)的ZPL條碼打印類完整實(shí)例

    C#實(shí)現(xiàn)的ZPL條碼打印類完整實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的ZPL條碼打印類,結(jié)合實(shí)例形式詳細(xì)分析了C#實(shí)現(xiàn)條碼打印的原理與使用方法,代碼注釋中備有詳盡的說(shuō)明,便于理解使用,需要的朋友可以參考下
    2016-06-06

最新評(píng)論