1. 程式人生 > >LINQ to Object——立即執行的Enumerable類方法

LINQ to Object——立即執行的Enumerable類方法

sele span 是否 技術分享 lin CA cee 註意 第一個

在前面說到LINQ to Object——延時執行的Enumerable類的方法,接下來說說LINQ to Object——立即執行的Enumerable類方法。

1.ToArray 序列轉換成數組

            List<string> names_list = new List<string> { "張三", "範冰冰", "李冰冰", "邁克爾·傑克遜", "李四", "王五", "趙六", "田七" };
            string[] takenames_arry = names_list.ToArray();

            
string[] takenames_arry2 = (from name in names_list select name).Take(4).ToArray(); foreach (var name in takenames_arry2) { Console.WriteLine(name); } Console.WriteLine("----------------------------"); Console.ReadKey();

運行結果:

技術分享圖片

2.ToList 序列轉換成List<T>

            string[] names_array = { "張三", "範冰冰", "李冰冰", "邁克爾·傑克遜", "李四", "王五", "趙六", "田七" };
            List<string> takenames_list = names_array.ToList();

            List<string> takenames_list2 = (from name in names_array select name).Skip(4).ToList();
            
foreach (var name in takenames_list2) { Console.WriteLine(name); } Console.WriteLine("----------------------------"); Console.ReadKey();

運行結果:

技術分享圖片

3.ToDictionary 把序列轉換為泛型Dictionary<TKey,TValue>

4.ToLookup 用於將序列轉換為泛型Lookup<TKey,TValue>

5.SequenceEqual 比較兩個序列是否相等

            bool sequence_equal = names_array.SequenceEqual(names_list);
            bool sequence_equal2 = names_array.Skip(1).Take(2).SequenceEqual(names_list.Take(3).SkipWhile(n => n.Length == 2));
            Console.WriteLine("{0},{1}", sequence_equal, sequence_equal2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

6.First 返回序列第一個滿足條件元素

            var first_name = names_array.First();
            var first_name2 = names_array.First(n => n.Length == 3);
            Console.WriteLine("{0},{1}", first_name, first_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

7.FirstOrDefault 返回序列第一個滿足條件元素,如果沒有找到則返回默認值

            var first_or_default_name = names_array.FirstOrDefault();
            var first_or_default_name2 = names_array.FirstOrDefault(n => n == "123");
            Console.WriteLine("{0},{1}", first_or_default_name, first_or_default_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

8.Last 返回序列最後一個滿足條件元素

            var last_name = names_array.Last();
            var last_name2 = names_array.LastOrDefault(n => n.Length == 3);
            Console.WriteLine("{0},{1}", last_name, last_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

9.LastOrDefault 返回序列最後一個滿足條件元素,如果沒有找到則返回默認值

            var last_or_default_name = names_array.LastOrDefault();
            var last_or_default_name2 = names_array.LastOrDefault(n => n == "123");
            Console.WriteLine("{0},{1}", last_or_default_name, last_or_default_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

10.Single 返回序列中唯一的元素,註意:如果序列中包含多個元素,會引發運行錯誤

            try
            {
                var single_name = names_array.Single();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("----------------------------");
            var single_name2 = names_array.Single(n => n == "張三");
            Console.WriteLine("{0}", single_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

11.SingleOrDefault 找出序列中滿足一定條件的元素,註意:如果序列為空則返回默認值, 如果序列中包含多個多個元素會引發運行錯誤

            try
            {
                var single_or_default_name = Enumerable.Empty<int>().SingleOrDefault();
                Console.WriteLine("{0}", single_or_default_name);//不報錯,如果序列為空就返回默認值 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("----------------------------");

            try
            {
                var single_or_default_name2 = names_array.SingleOrDefault();
                Console.WriteLine("{0}", single_or_default_name2);//報錯,序列包含多行錯誤
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("----------------------------");

            var single_or_default_name3 = Enumerable.Empty<string>().DefaultIfEmpty("默認值").SingleOrDefault();
            Console.WriteLine("{0}", single_or_default_name3);
            Console.WriteLine("----------------------------");

            var single_or_default_name4 = names_array.SingleOrDefault(n => n == "123");
            Console.WriteLine("{0}", single_or_default_name4);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

12.ElementAt 獲得指定索引處的元素

            var element_at_name = names_array.ElementAt(3);
            Console.WriteLine("{0}", element_at_name);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

13.ElementAtOrDefault 獲得指定索引處的元素,如果超出索引,則返回元素類型的默認值

            var element_at_or_default_name = names_array.ElementAtOrDefault(5);
            var element_at_or_default_name2 = names_array.ElementAtOrDefault(10);
            Console.WriteLine("{0},{1}", element_at_or_default_name, element_at_or_default_name2);
            Console.WriteLine("----------------------------");
            Console.ReadKey();

運行結果:

技術分享圖片

14.All 序列中的所有元素是否都滿足條件

15.Any 序列中的元素是否存在或滿足條件

16.Contains 確定元素是否在序列中

17.Count 序列包含元素的數量

18.LongCount 獲取一個Int64類型的元素數量

19.Aggregate 將序列元素進行累加

20.Sum 序列之和

21.Average 序列平均值

22.Min 序列的最小值

23.Max 序列的最大值

未完待續。。。。。。

LINQ to Object——立即執行的Enumerable類方法