{"id":320,"date":"2022-08-30T19:39:05","date_gmt":"2022-08-30T11:39:05","guid":{"rendered":"https:\/\/www.fengjijiao.cn\/?p=320"},"modified":"2022-08-30T20:38:14","modified_gmt":"2022-08-30T12:38:14","slug":"enumerable-class-c","status":"publish","type":"post","link":"https:\/\/www.fengjijiao.cn\/?p=320","title":{"rendered":"Enumerable Class (C#)"},"content":{"rendered":"\n<p>\u63d0\u4f9b\u4e00\u7ec4\u9759\u6001\u65b9\u6cd5\u7528\u4e8e\u67e5\u8be2\u5b9e\u73b0IEnumerable&lt;T&gt;\u7684\u5bf9\u8c61\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Methods<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.Aggregate<\/h3>\n\n\n\n<p>\u5728\u5e8f\u5217\u4e0a\u5e94\u7528\u7d2f\u52a0\u5668\u51fd\u6570\u3002\u6307\u5b9a\u7684\u503c\u4f5c\u4e3a\u521d\u59cb\u7d2f\u52a0\u5668\u503c\uff0c\u6307\u5b9a\u7684\u51fd\u6570\u7528\u4e8e\u9009\u62e9\u7ed3\u679c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;String&gt; fruits = new List&lt;string&gt;();\nfruits.AddRange(new string&#91;] { \"apple\", \"mango\", \"orange\", \"passionfruit\"});\nstring longestName = fruits.Aggregate(\"banana\", (longest, next) =&gt; next.Length &gt; longest.Length ? next : longest, fruit =&gt; fruit.ToUpper());\nConsole.WriteLine(\"the fruit with longest name is {0}.\", longestName);\n\/\/the fruit with longest name is PASSIONFRUIT.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.All<\/h3>\n\n\n\n<p>\u5224\u65ad\u5e8f\u5217\u7684\u6240\u6709\u503c\u662f\u5426\u90fd\u6ee1\u8db3\u7279\u5b9a\u6761\u4ef6\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Pet {\n  public string Name {\n    get;\n    set;\n  }\n  public int Age {\n    get;\n    set;\n  }\n}\n\npublic class Person {\n  public string LastName {\n    get;\n    set;\n  }\n  public Pet&#91;] Pets {\n    get;\n    set;\n  }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Person&gt; people = new List&lt;Person&gt;{\n    new Person{LastName = \"Haas\", Pets =\n                                      new Pet&#91;]{\n                                          new Pet{Name = \"Barley\", Age = 10},\n                                          new Pet{Name = \"Boots\", Age = 14},\n                                          new Pet{Name = \"Whiskers\", Age = 6},\n                                      }},\n    new Person{\n        LastName = \"Fakhouri\",\n        Pets =\n            new Pet&#91;]{\n                new Pet{Name = \"Snowball\", Age = 1},\n            },\n    },\n    new Person{LastName = \"Antebi\", Pets =\n                                        new Pet&#91;]{\n                                            new Pet{Name = \"Belle\", Age = 8},\n                                        }},\n    new Person{LastName = \"Philips\", Pets = new Pet&#91;]{\n                                         new Pet{Name = \"Sweetie\", Age = 2},\n                                         new Pet{Name = \"Rover\", Age = 13},\n                                     }}};\n\/\/\u7b5b\u9009\u6240\u6709\u5ba0\u7269\u5e74\u9f84\u5927\u4e8e5\u7684\u6240\u6709\u4eba\nIEnumerable&lt;string&gt; allownpetgt5names =\n    from person in people where\n        person.Pets.All(pet =&gt; pet.Age &gt; 5) select person.LastName;\nforeach (string name in allownpetgt5names) {\n  Console.WriteLine(name);\n}\n\/\/ All\nConsole.WriteLine(\"all pet`s age &gt;5: {0}\",\n                  people&#91;0].Pets.All(i =&gt; i.Age &gt; 5));  \/\/ True<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.Any<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Person&gt; people = new List&lt;Person&gt;{\n    new Person{LastName = \"Haas\", Pets =\n                                      new Pet&#91;]{\n                                          new Pet{Name = \"Barley\", Age = 10},\n                                          new Pet{Name = \"Boots\", Age = 14},\n                                          new Pet{Name = \"Whiskers\", Age = 6},\n                                      }},\n    new Person{\n        LastName = \"Fakhouri\",\n        Pets =\n            new Pet&#91;]{\n                new Pet{Name = \"Snowball\", Age = 1},\n            },\n    },\n    new Person{LastName = \"Antebi\", Pets =\n                                        new Pet&#91;]{\n                                            new Pet{Name = \"Belle\", Age = 8},\n                                        }},\n    new Person{LastName = \"Philips\", Pets = new Pet&#91;]{\n                                         new Pet{Name = \"Sweetie\", Age = 2},\n                                         new Pet{Name = \"Rover\", Age = 13},\n                                     }}};\n\/\/\u7b5b\u9009\u6240\u6709\u5ba0\u7269\u5e74\u9f84\u5927\u4e8e5\u7684\u6240\u6709\u4eba\nIEnumerable&lt;string&gt; allownpetgt5names =\n    from person in people where\n        person.Pets.All(pet =&gt; pet.Age &gt; 5) select person.LastName;\nforeach (string name in allownpetgt5names) {\n  Console.WriteLine(name);\n}\n\/\/ Any\nConsole.WriteLine(\"any pet`s age &gt;5: {0}\",\n                  people&#91;3].Pets.Any(i =&gt; i.Age &gt; 5));  \/\/ True<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.Append<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;int&gt; numbers = new List&lt;int&gt;{1, 2, 3, 4};\nnumbers.Append(5);\nConsole.WriteLine(string.Join(\",\", numbers));            \/\/ 1,2,3,4\nConsole.WriteLine(string.Join(\",\", numbers.Append(5)));  \/\/ 1,2,3,4,5\nList&lt;int&gt; newNumbers = numbers.Append(5).ToList();\nConsole.WriteLine(string.Join(\",\", newNumbers));  \/\/ 1,2,3,4,5<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.AsEnumerable<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class Clump&lt;T> : List&lt;T> {\r\n  public IEnumerable&lt;T> Where(Func&lt;T, bool> predicate) {\r\n    Console.WriteLine(\"In Clump`s implmentation of Where().\");\r\n    return Enumerable.Where(this, predicate);\r\n  }\r\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Clump&lt;string&gt; fruitClump =\n    new Clump&lt;string&gt;{\"apple\",  \"passionfruit\", \"banana\", \"mongo\",\n                      \"orange\", \"blueberry\",    \"grape\",  \"strawberry\"};\n\/\/ first: call clump`s Where() method with a predicate\nIEnumerable&lt;string&gt; query1 = fruitClump.Where(fruit =&gt; fruit.Contains(\"o\"));\n\/\/ second: first call AsEnumerable() to hide Clump`s Where() method and thereby\n\/\/ force System.Linq.Enumerable`s Where() method to be called.\nIEnumerable&lt;string&gt; query2 =\n    fruitClump.AsEnumerable().Where(fruit =&gt; fruit.Contains(\"o\"));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.Average<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>long ? &#91;] longs = {null, 10007L, 37L, 399846234235L};\ndouble ? average = longs.Average();\nConsole.WriteLine(\"The average is {0}.\", average);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7.Cast<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>System.Collections.ArrayList fruits2 = new System.Collections.ArrayList();\nfruits2.Add(\"mongo\");\nfruits2.Add(\"apple\");\nfruits2.Add(\"lemon\");\nIEnumerable&lt;string&gt; query =\n    fruits2.Cast&lt;string&gt;().OrderBy(fruit =&gt; fruit).Select(fruit =&gt; fruit);\n\/\/\u4e0b\u9762\u7684\u4ee3\u7801\u6ca1\u6709cast\u65e0\u6cd5\u7f16\u8bd1\u901a\u8fc7\n\/\/ IEnumerable&lt;string&gt; query = fruits2.OrderBy(fruit =&gt; fruit).Select(fruit =&gt;\n\/\/ fruit);\nforeach (string fruit in query) {\n  Console.WriteLine(fruit);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8.Chunk \u5206\u5757\u548c\u5206\u5757\u5e76\u884c<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var list = Enumerable.Range(1, 100);  \/\/ 1-100\nvar chunkSize = 10;\nforeach (var chunk in list.Chunk(\n             chunkSize))  \/\/ 1-10,11-20,21-30,31-40,41-50,51-60...91-100\n{\n  Console.WriteLine(\"=&gt;\");\n  foreach (var item in chunk) {\n    Console.WriteLine(item);\n  }\n}\nforeach (var chunk in list.Chunk(\n             chunkSize))  \/\/ 1-10,11-20,21-30,31-40,41-50,51-60...91-100\n{\n  Console.WriteLine(\"=&gt;\");\n  Parallel.ForEach(chunk, (item) =&gt; { Console.WriteLine(item); });\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.Concat<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>static Pet&#91;] GetCats() {\n  Pet&#91;] pets = {\n      new Pet{Name = \"Barley\", Age = 8},\n      new Pet{Name = \"Boots\", Age = 4},\n      new Pet{Name = \"Whiskers\", Age = 1},\n  };\n  return pets;\n}\n\nstatic Pet&#91;] GetDogs() {\n  Pet&#91;] pets = {\n      new Pet{Name = \"Bounder\", Age = 3},\n      new Pet{Name = \"Snoopy\", Age = 14},\n      new Pet{Name = \"Fido\", Age = 9},\n  };\n  return pets;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet&#91;] cats = GetCats();\nPet&#91;] dogs = GetDogs();\nIEnumerable&lt;string&gt; query =\n    cats.Select(cat =&gt; cat.Name).Concat(dogs.Select(dog =&gt; dog.Name));\nforeach (string name in query) {\n  Console.WriteLine(name);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10.Contains<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>long&#91;] ls = new long&#91;]{1L, 2L, 5L, 7L};\nConsole.WriteLine(\"is contains 5L: {0}\", ls.Contains(5L));\nConsole.WriteLine(\"is contains 5L: {0}\", Enumerable.Contains(ls, 5L));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">11.Count<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>long&#91;] ls = new long&#91;]{1, 2, 3, 4, 5, 6};\nConsole.WriteLine(\"count: {0}\", ls.Count());\nConsole.WriteLine(\"count: {0}\", Enumerable.Count(ls));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">12.DefaultIfEmpty<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ non-empty sequence\nList&lt;Pet&gt; pets = new List&lt;Pet&gt;{new Pet{Name = \"Barley\", Age = 8},\n                               new Pet{Name = \"Boots\", Age = 4},\n                               new Pet{Name = \"Whiskers\", Age = 1}};\nforeach (Pet pet in pets.DefaultIfEmpty()) {\n  Console.WriteLine(pet.Name);  \/\/ Barley Boots Whiskers\n}\n\/\/ empty sequence\nList&lt;int&gt; numbers = new List&lt;int&gt;();\nforeach (int number in numbers.DefaultIfEmpty()) {\n  Console.WriteLine(number);  \/\/ 0\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">13.Distinct \u901a\u8fc7Comparer\u53bb\u91cd<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Product&#91;] products = new Product&#91;]{new Product{Name = \"apple\", Code = 8},\n                                   new Product{Name = \"apple\", Code = 9},\n                                   new Product{Name = \"orange\", Code = 4},\n                                   new Product{Name = \"apple\", Code = 9},\n                                   new Product{Name = \"lemon\", Code = 12}};\nforeach (Product product in products)\n  Console.WriteLine(\"name: {0}, code: {1}\", product.Name, product.Code);\n\/*\n *  name: apple, code: 8\n    name: apple, code: 9\n    name: orange, code: 4\n    name: apple, code: 9\n    name: lemon, code: 12\n *\/\nIEnumerable&lt;Product&gt; noduplicates = products.Distinct(new ProductComparer());\nforeach (Product product in noduplicates)\n  Console.WriteLine(\"name: {0}, code: {1}\", product.Name, product.Code);\n\/*\n *  name: apple, code: 8\n    name: apple, code: 9\n    name: orange, code: 4\n    name: lemon, code: 12\n*\/<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>class ProductComparer : IEqualityComparer&lt;Product&gt; {\n  \/\/ Products are equal if their names and product number are equal.\n  public bool Equals(Product x, Product y) {\n    \/\/ check whether the compared objects reference the same data.\n    if (Object.ReferenceEquals(x, y)) return true;\n    \/\/ check whether any of the compared objects is null.\n    if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))\n      return false;\n    \/\/ check whether the products properties are equal.\n    return x.Code == y.Code &amp;&amp; x.Name == y.Name;\n  }\n\n  \/\/ if Equals() returns true for a pair of objects\n  \/\/ then GetHashCode() must return the same value for these objects.\n  public int GetHashCode(&#91; DisallowNull ] Product obj) {\n    \/\/ Check wheather the object is null\n    if (Object.ReferenceEquals(obj, null)) return 0;\n    \/\/ Get hash code for the Name field if it is not null\n    int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();\n    \/\/ Get hash code for the Code field\n    int hashProductCode = obj.Code.GetHashCode();\n    \/\/ Calculate the hash code for the product.\n    return hashProductName ^ hashProductCode;\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">14.DistinctBy \u901a\u8fc7func\u53bb\u91cd<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Product&#91;] collectionWithDuplicates = new Product&#91;]{\n    new Product{Name = \"good\", Code = 9}, new Product{Name = \"apple\", Code = 9},\n    new Product{Name = \"orange\", Code = 4},\n    new Product{Name = \"apple\", Code = 9},\n    new Product{Name = \"lemon\", Code = 12}};\nvar uniqueCollection =\n    collectionWithDuplicates.DistinctBy(x =&gt; x.Name).ToList();\nforeach (Product product in uniqueCollection)\n  Console.WriteLine(\"name: {0}, code: {1}\", product.Name, product.Code);\n\/*\n *  name: good, code: 9\n *  name: orange, code: 5\n    name: apple, code: 9\n    name: lemon, code: 12\n *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">15.ElementAt<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints = new int&#91;]{\n    1, 2, 3, 4, 5,\n};\nConsole.WriteLine(ints.ElementAt(3));  \/\/ 4<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">16.ElementAtOrDefault<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints = new int&#91;]{\n    1, 2, 3, 4, 5,\n};\nConsole.WriteLine(ints.ElementAtOrDefault(5));  \/\/ 0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">17.Empty \u8fd4\u56de\u6307\u5b9a\u7c7b\u578b\u7684\u7a7a\u5e8f\u5217<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>IEnumerable&lt;decimal&gt; empty = Enumerable.Empty&lt;decimal&gt;();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">18.Except \u4ea7\u751f\u4e24\u4e2a\u5e8f\u5217\u7684\u96c6\u5408\u5dee<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints1 = new int&#91;]{\n    1, 2, 3, 4, 5,\n};\nint&#91;] ints2 = new int&#91;]{\n    1, 2, 0, 3, 6,\n};\nConsole.WriteLine(JsonConvert.SerializeObject(\n    Enumerable.Except(ints1, ints2)));  \/\/&#91;4,5] ints1\u4e2d\u6392\u9664ints2<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">19.ExceptBy<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Product&#91;] products1 = new Product&#91;]{new Product{Name = \"blueberry\", Code = 9},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"orange\", Code = 4},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"lemon\", Code = 12}};\nProduct&#91;] products2 = new Product&#91;]{new Product{Name = \"mongo\", Code = 9},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"orange\", Code = 4},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"lemon\", Code = 12}};\n\/\/ Enumerable.ExceptBy(products1, products2, ProductNameSelector);\nforeach (Product product in products1.ExceptBy(\n             products2.Select(ProductNameSelector),\n             ProductNameSelector))  \/\/ products.ExceptBy(names, NameSelector)\n{\n  Console.WriteLine(\"name: {0}, code: {1}\", product.Name,\n                    product.Code);  \/\/ name: blueberry, code: 9\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>static string ProductNameSelector(Product product) =&gt; product.Name;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">20.First<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints1 = new int&#91;]{\n    1, 2, 3, 4, 5,\n};\nConsole.WriteLine(\"first: {0}\", ints1.First());  \/\/ 1<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">21.FirstOrDefault<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints1 = new int&#91;]{};\nConsole.WriteLine(\"first: {0}\", ints1.FirstOrDefault());  \/\/ 0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">22.GroupBy<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Create a list of pets.\nList&lt;Pet2&gt; petsList = new List&lt;Pet2&gt;{new Pet2{Name = \"Barley\", Age = 8.3},\n                                     new Pet2{Name = \"Boots\", Age = 4.9},\n                                     new Pet2{Name = \"Whiskers\", Age = 1.5},\n                                     new Pet2{Name = \"Daisy\", Age = 4.3}};\n\n\/\/ Group Pet.Age values by the Math.Floor of the age.\n\/\/ Then project an anonymous type from each group\n\/\/ that consists of the key, the count of the group's\n\/\/ elements, and the minimum and maximum age in the group.\nvar query = petsList.GroupBy(\n    pet =&gt; Math.Floor(pet.Age),  \/\/@1\n    pet =&gt; pet.Age,\n    (baseAge, ages) =&gt;\n        new {Key = baseAge,  \/\/@1\n             Count = ages.Count(), Min = ages.Min(), Max = ages.Max()});\nConsole.WriteLine(JsonConvert.SerializeObject(query));\n\n\/\/ Iterate over each anonymous type.\nforeach (var result in query) {\n  Console.WriteLine(\"\\nAge group: \" + result.Key);\n  Console.WriteLine(\"Number of pets in this age group: \" + result.Count);\n  Console.WriteLine(\"Minimum age: \" + result.Min);\n  Console.WriteLine(\"Maximum age: \" + result.Max);\n}\n\n\/*  This code produces the following output:\n\n    Age group: 8\n    Number of pets in this age group: 1\n    Minimum age: 8.3\n    Maximum age: 8.3\n\n    Age group: 4\n    Number of pets in this age group: 2\n    Minimum age: 4.3\n    Maximum age: 4.9\n\n    Age group: 1\n    Number of pets in this age group: 1\n    Minimum age: 1.5\n    Maximum age: 1.5\n*\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">23.IntersectBy<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints1 = new int&#91;]{\n    1, 2, 3, 4, 5,\n};\nint&#91;] ints2 = new int&#91;]{\n    1, 2, 0, 3, 6,\n};\nConsole.WriteLine(\n    JsonConvert.SerializeObject(Enumerable.Intersect(ints1, ints2)));  \/\/&#91;1,2,3]\nProduct&#91;] products1 = new Product&#91;]{new Product{Name = \"blueberry\", Code = 9},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"orange\", Code = 4},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"lemon\", Code = 12}};\nProduct&#91;] products2 = new Product&#91;]{new Product{Name = \"mongo\", Code = 9},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"orange\", Code = 4},\n                                    new Product{Name = \"apple\", Code = 9},\n                                    new Product{Name = \"lemon\", Code = 12}};\nConsole.WriteLine(JsonConvert.SerializeObject(\n    Enumerable.Intersect(products1, products2, new ProductComparer())));\n\/\/&#91;{\"Name\":\"apple\",\"Code\":9},{\"Name\":\"orange\",\"Code\":4},{\"Name\":\"lemon\",\"Code\":12}]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">24.Join<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Person3 magnus = new Person3{Name = \"Hedlund, Magnus\"};\nPerson3 terry = new Person3{Name = \"Adams, Terry\"};\nPerson3 charlotte = new Person3{Name = \"Weiss, Charlotte\"};\n\nPet3 barley = new Pet3{Name = \"Barley\", Owner = terry};\nPet3 boots = new Pet3{Name = \"Boots\", Owner = terry};\nPet3 whiskers = new Pet3{Name = \"Whiskers\", Owner = charlotte};\nPet3 daisy = new Pet3{Name = \"Daisy\", Owner = magnus};\n\nList&lt;Person3&gt; people3 = new List&lt;Person3&gt;{magnus, terry, charlotte};\nList&lt;Pet3&gt; pets3 = new List&lt;Pet3&gt;{barley, boots, whiskers, daisy};\n\n\/\/ create a list of person-pet pairs where\n\/\/ each element is an anonymous type that contains a\n\/\/ pet`s name and the name of the person that owns the pet\n\/\/ Join&lt;TOuter,TInner,TKey,TResult&gt;(IEnumerable&lt;TOuter&gt;, IEnumerable&lt;TInner&gt;,\n\/\/ Func&lt;TOuter,TKey&gt;, Func&lt;TInner,TKey&gt;, Func&lt;TOuter,TInner,TResult&gt;)\nvar query = people3.Join(\n    pets3, person =&gt; person, pet =&gt; pet.Owner,\n    (person, pet) =&gt; new {OwnerName = person.Name, Pet = pet.Name});\nforeach (var obj in query) {\n  Console.WriteLine(\"{0} - {1}\", obj.OwnerName, obj.Pet);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">25.Last<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var a = new string&#91;] { \"123\", \"123\", \"123\", \"333\" };\nConsole.WriteLine(a.Last());\/\/333<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">26.LastOrDefault<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var a = new string&#91;] {  };\nConsole.WriteLine(a.LastOrDefault());\/\/ <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">27.LongCount<\/h3>\n\n\n\n<p>Pet[] pets = {<br>new Pet{Name = &#8220;Barley&#8221;, Age = 8},<br>new Pet{Name = &#8220;Boots&#8221;, Age = 4},<br>new Pet{Name = &#8220;Whiskers&#8221;, Age = 1},<br>};<br>const int Age = 3;<br>long count = pets.LongCount(pet =&gt; pet.Age &gt; Age);<br>Console.WriteLine(&#8220;There are {0} animals over age {1}.&#8221;, count, Age);<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">28.Max<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var a = new int&#91;] { 1, 3, 2 };\nConsole.WriteLine(\"the max: {0}\", a.Max());<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">29.MaxBy<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet&#91;] pets = {\n    new Pet{Name = \"Barley\", Age = 8},\n    new Pet{Name = \"Boots\", Age = 4},\n    new Pet{Name = \"Whiskers\", Age = 1},\n};\nConsole.WriteLine(\"the max: {0}\",\n                  JsonConvert.SerializeObject(pets.MaxBy(pet =&gt; pet.Age)));\nConsole.WriteLine(\"the max: {0}\",\n                  JsonConvert.SerializeObject(pets.MaxBy(pet =&gt; pet,\n                                                         new MyPetComparer())));<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class MyPetComparer : IComparer&lt;Pet&gt; {\n  int IComparer&lt;Pet&gt;.Compare(Pet? x, Pet? y) { return x.Age - y.Age; }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">30.Min<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var a = new int&#91;] { 1, 3, 2 };\nConsole.WriteLine(\"the min: {0}\", a.Min());<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">31.MinBy<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet&#91;] pets = {\n    new Pet{Name = \"Barley\", Age = 8},\n    new Pet{Name = \"Boots\", Age = 4},\n    new Pet{Name = \"Whiskers\", Age = 1},\n};\nConsole.WriteLine(\"the min: {0}\",\n                  JsonConvert.SerializeObject(pets.MinBy(pet =&gt; pet.Age)));\nConsole.WriteLine(\"the min: {0}\",\n                  JsonConvert.SerializeObject(pets.MinBy(pet =&gt; pet,\n                                                         new MyPetComparer())));<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class MyPetComparer : IComparer&lt;Pet&gt; {\n  int IComparer&lt;Pet&gt;.Compare(Pet? x, Pet? y) { return x.Age - y.Age; }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">32.OfType<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>ArrayList mixedList = new ArrayList();\nmixedList.Add(0);\nmixedList.Add(\"Gnanavel Sekar\");\nmixedList.Add(\"Two\");\nmixedList.Add(3);\nmixedList.Add(3.21f);\nmixedList.Add(new Pet{Name = \"Whiskers\", Age = 1});\nvar stringResult = from s in mixedList.OfType&lt;string&gt;() select s;\nforeach (var item in stringResult) {\n  Console.WriteLine(item);\n}\n\/*\n * Gnanavel Sekar\n * Two\n *\/\nvar intResult = from s in mixedList.OfType&lt;int&gt;() select s;\nforeach (var item in intResult) {\n  Console.WriteLine(item);\n}\n\/*\n * 0\n * 3\n *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">33.OrderBy \u5347\u5e8f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet&#91;] pets = {\n    new Pet{Name = \"Barley\", Age = 8},\n    new Pet{Name = \"Boots\", Age = 4},\n    new Pet{Name = \"Whiskers\", Age = 1},\n};\nConsole.WriteLine(JsonConvert.SerializeObject(pets.OrderBy(pet =&gt; pet.Age)));\nConsole.WriteLine(\n    JsonConvert.SerializeObject(pets.OrderBy(pet =&gt; pet, new MyPetComparer())));<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class MyPetComparer : IComparer&lt;Pet&gt; {\n  int IComparer&lt;Pet&gt;.Compare(Pet? x, Pet? y) { return x.Age - y.Age; }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">34.OrderByDescending \u964d\u5e8f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet&#91;] pets = {\n    new Pet{Name = \"Barley\", Age = 8},\n    new Pet{Name = \"Boots\", Age = 4},\n    new Pet{Name = \"Whiskers\", Age = 1},\n};\nConsole.WriteLine(\n    JsonConvert.SerializeObject(pets.OrderByDescending(pet =&gt; pet.Age)));\nConsole.WriteLine(JsonConvert.SerializeObject(\n    pets.OrderByDescending(pet =&gt; pet, new MyPetComparer())));<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class MyPetComparer : IComparer&lt;Pet&gt; {\n  int IComparer&lt;Pet&gt;.Compare(Pet? x, Pet? y) { return x.Age - y.Age; }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">35.Prepend \u5411\u524d\u8ffd\u52a0<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;int&gt; numbers = new List&lt;int&gt;{1, 2, 3, 4};\nnumbers.Prepend(0);\nConsole.WriteLine(JsonConvert.SerializeObject(numbers));             \/\/ 1,2,3,4\nConsole.WriteLine(JsonConvert.SerializeObject(numbers.Prepend(0)));  \/\/ 0,1,2,3,4\nList&lt;int&gt; newNumbers = numbers.Prepend(0).ToList();\nConsole.WriteLine(JsonConvert.SerializeObject(newNumbers));  \/\/ 0,1,2,3,4<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">36.Range<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>IEnumerable&lt;int&gt; squares = Enumerable.Range(1, 10).Select(x =&gt; x * x);\nforeach (int num in squares) {\n  Console.WriteLine(num);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">37.Repeat \u751f\u6210\u591a\u4e2a\u76f8\u540c\u91cd\u590d\u503c\u7684\u5e8f\u5217<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>IEnumerable&lt;string&gt; strs = Enumerable.Repeat(\"I like programming.\", 15);\nforeach (String str in strs) {\n  Console.WriteLine(str);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">38.Reverse<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;int&gt; numbers = new List&lt;int&gt;{1, 2, 3, 4};\nnumbers.Reverse();\nConsole.WriteLine(JsonConvert.SerializeObject(numbers));  \/\/ 4,3,2,1<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">39.Select<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>string&#91;] fruits3 = {\"apple\",  \"banana\",       \"mango\",\n                    \"orange\", \"passionfruit\", \"grape\"};\nvar query = fruits3.Select((fruit, index) =&gt;\n                               new {index, str = fruit.Substring(0, index)});\nforeach (var obj in query) {\n  Console.WriteLine(\"{0}\", obj);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">40.SelectMany<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>PetOwner&#91;] petOwners = new PetOwner&#91;]{\n    new PetOwner{Name = \"Higa\", Pets = new List&lt;string&gt;{\"Scruffy\", \"Sam\"}},\n    new PetOwner{Name = \"Ashkenazi\",\n                 Pets = new List&lt;string&gt;{\"Walker\", \"Sugar\"}},\n    new PetOwner{Name = \"Price\",\n                 Pets = new List&lt;string&gt;{\"Scratches\", \"Diesel\"}},\n    new PetOwner{Name = \"Hines\", Pets = new List&lt;string&gt;{\"Dusty\"}},\n};\nvar query1 = petOwners.SelectMany(\n    petOwner =&gt; petOwner.Pets,\n    (petOwner, petName) =&gt; new {petOwner, petName});  \/\/\u5c06petOwner.Pets\u5c55\u5f00\nConsole.WriteLine(JsonConvert.SerializeObject(query1));\n\/*\n * &#91;\n * {\"petOwner\":{\"Name\":\"Higa\",\"Pets\":&#91;\"Scruffy\",\"Sam\"]},\"petName\":\"Scruffy\"},\n * {\"petOwner\":{\"Name\":\"Higa\",\"Pets\":&#91;\"Scruffy\",\"Sam\"]},\"petName\":\"Sam\"},\n * {\"petOwner\":{\"Name\":\"Ashkenazi\",\"Pets\":&#91;\"Walker\",\"Sugar\"]},\"petName\":\"Walker\"},\n * {\"petOwner\":{\"Name\":\"Ashkenazi\",\"Pets\":&#91;\"Walker\",\"Sugar\"]},\"petName\":\"Sugar\"},\n * {\"petOwner\":{\"Name\":\"Price\",\"Pets\":&#91;\"Scratches\",\"Diesel\"]},\"petName\":\"Scratches\"},\n * {\"petOwner\":{\"Name\":\"Price\",\"Pets\":&#91;\"Scratches\",\"Diesel\"]},\"petName\":\"Diesel\"},\n * {\"petOwner\":{\"Name\":\"Hines\",\"Pets\":&#91;\"Dusty\"]},\"petName\":\"Dusty\"}\n * ]\n *\/\n\/\/ project the pet owner`s name and the pet`s name\nvar query = petOwners\n                .SelectMany(petOwner =&gt; petOwner.Pets,\n                            (petOwner, petName) =&gt; new {petOwner, petName})\n                .Where(ownerAndPet =&gt; ownerAndPet.petName.StartsWith(\"S\"))\n                .Select(ownerAndPet =&gt; new {Owner = ownerAndPet.petOwner.Name,\n                                            Pet = ownerAndPet.petName});\nforeach (var obj in query) {\n  Console.WriteLine(obj);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">41.SequenceEqual<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Pet pet1 = new Pet{Name = \"Turbo\", Age = 2};\nPet pet2 = new Pet{Name = \"Peanut\", Age = 9};\n\nList&lt;Pet&gt; pets1 = new List&lt;Pet&gt;{pet1, pet2};\nList&lt;Pet&gt; pets2 = new List&lt;Pet&gt;{pet1, pet2};\n\nbool equal = pets1.SequenceEqual(pets2);\nConsole.WriteLine(\"The sequence is equals: {0}.\", equal);  \/\/ True\n\nList&lt;Pet&gt; pets3 = new List&lt;Pet&gt;{pet1, pet2};\nList&lt;Pet&gt; pets4 = new List&lt;Pet&gt;{\n    new Pet{Name = \"Turbo\", Age = 2},\n    new Pet{Name = \"Peanut\", Age = 9},\n};\nbool equal2 = pets3.SequenceEqual(pets4);\nConsole.WriteLine(\"The sequence is equals: {0}.\", equal2);  \/\/ False\n\/\/\u5728\u8fd9\u91cc\u6bd4\u8f83\u7684\u662f\u5f15\u7528\u5730\u5740\n\n\/\/\u53ef\u4ee5\u81ea\u884c\u5b9e\u73b0IEquatable\u63a5\u53e3\uff0c\u91cd\u5199GetHashCode\u548cEquals\u65b9\u6cd5\nList&lt;ProductA&gt; pets5 = new List&lt;ProductA&gt;{\n    new ProductA{Name = \"Turbo\", Code = 2},\n    new ProductA{Name = \"Peanut\", Code = 9},\n};\nList&lt;ProductA&gt; pets6 = new List&lt;ProductA&gt;{\n    new ProductA{Name = \"Turbo\", Code = 2},\n    new ProductA{Name = \"Peanut\", Code = 9},\n};\nbool equal3 = pets5.SequenceEqual(pets6);\nConsole.WriteLine(\"The sequence is equals: {0}.\", equal3);  \/\/ True\n\nConsole.WriteLine(JsonConvert.SerializeObject((9, 9)));  \/\/{\"Item1\":9,\"Item2\":9}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProductA : IEquatable&lt;ProductA&gt; {\n  public string Name {\n    get;\n    set;\n  }\n  public int Code {\n    get;\n    set;\n  }\n\n  public bool Equals(ProductA other) {\n    if (other is null) return false;\n\n    return this.Name == other.Name &amp;&amp; this.Code == other.Code;\n  }\n\n  public override bool Equals(object obj) =&gt; Equals(obj as ProductA);\n  public override int GetHashCode() =&gt;(Name, Code).GetHashCode();\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">42.Single \u8fd4\u56de\u4e00\u6761\u5339\u914d\u7ed3\u679c<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>string&#91;] fruits3 = {\"apple\",  \"banana\",       \"mango\",\n                    \"orange\", \"passionfruit\", \"grape\"};\nstring fruit1 = null;\ntry {\n  fruit1 = fruits3.Single(fruit =&gt; fruit.Length &gt; 20);\n} catch (System.InvalidOperationException) {\n  Console.WriteLine(\n      @\"The collection does not contain exactly one element whose length is grater than 20.\");\n}\nConsole.WriteLine(fruit1);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">43.SingleOrDefault<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>string&#91;] fruits3 = {\"apple\",  \"banana\",       \"mango\",\n                    \"orange\", \"passionfruit\", \"grape\"};\nstring fruit1 = fruits3.SingleOrDefault(fruit =&gt; fruit.Length &gt; 20);\nConsole.WriteLine(fruit1);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">44.Skip \u4ece\u5e8f\u53f70\u5f00\u59cb\u8df3\u8fc7\u6307\u5b9a\u4e2a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades = grades.OrderByDescending(g =&gt; g).Skip(3);\nConsole.WriteLine(\"All grades except the top three are:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n} \/*\n   * All grades except the top three are:\n   82\n   70\n   59\n   56\n   *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">45.SkipLast \u4ece\u672b\u5c3e\u5012\u6570\u8df3\u8fc7\u6307\u5b9a\u4e2a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades = grades.OrderByDescending(g =&gt; g).SkipLast(3);\nConsole.WriteLine(\"All grades except the last three are:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n} \/*\n   *98\n  92\n  85\n  82\n   *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">46.SkipWhile \u6309\u7279\u5b9a\u6761\u4ef6<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades =\n    grades.OrderByDescending(g =&gt; g).SkipWhile(g =&gt; g &gt;= 80);\nConsole.WriteLine(\"All grades below 80:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n} \/*\n   *All grades below 80:\n   *70\n   *59\n   *56\n   *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">47.Sum \u6c42\u548c<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = { 59, 82, 70, 56, 92, 98, 85 };\nConsole.WriteLine(\"sum: {0}\", grades.Sum());\/\/sum: 542<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">48.Take \u4ece\u5e8f\u53f70\u5f00\u59cb\u9009\u62e9\u6307\u5b9a\u4e2a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades = grades.OrderByDescending(g =&gt; g).Take(3);\nConsole.WriteLine(\"the top threee grades are:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n} \/*\n   98\n   92\n   85\n   *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">49.TakeLast \u4ece\u672b\u5c3e\u5f00\u59cb\u5012\u6570\u9009\u62e9\u6307\u5b9a\u4e2a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades = grades.OrderByDescending(g =&gt; g).TakeLast(3);\nConsole.WriteLine(\"the last three grades are:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">50.TakeWhile \u6309\u7279\u5b9a\u6761\u4ef6\u9009\u62e9<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] grades = {59, 82, 70, 56, 92, 98, 85};\nIEnumerable&lt;int&gt; lowerGrades =\n    grades.OrderByDescending(g =&gt; g).TakeWhile(g =&gt; g &gt;= 80);\nConsole.WriteLine(\"All grades grater than 80:\");\nforeach (int grade in lowerGrades) {\n  Console.WriteLine(grade);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">51.ThenBy \u540e\u7eed\u6392\u5e8f\uff0c\u7528\u4e8eOrderBy\u540e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>string&#91;] fruits3 = {\"grape\",  \"passionfruit\", \"banana\", \"mango\",\n                    \"orange\", \"raspberry\",    \"apple\",  \"blueberry\"};\n\n\/\/ Sort the strings first by their length and then\n\/\/ alphabetically by passing the identity selector function.\nIEnumerable&lt;string&gt; query =\n    fruits3.OrderBy(fruit =&gt; fruit.Length).ThenBy(fruit =&gt; fruit);\n\nforeach (string fruit in query) {\n  Console.WriteLine(fruit);\n}\n\/*\n * apple\n * grape\n * mango\n * banana\n * orange\n * blueberry\n * raspberry\n * passionfruit\n *\/\n\/\/\u5f53\u6ca1\u6709\u4f7f\u7528ThenBy\u65f6\uff0c\u6ce8\u610f\u89c2\u5bdf\u5b57\u7b26\u957f\u5ea6\u4e00\u81f4\u7684\u6392\u5e8f\n\/* grape\n * mango\n * apple\n * banana\n * orange\n * raspberry\n * blueberry\n * passionfruit\n *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">52.ThenByDescending \u540e\u7eed\u6392\u5e8f\u5012\u5e8f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>string&#91;] fruits3 = {\"apPLe\",  \"baNanA\", \"apple\",  \"APple\",\n                    \"orange\", \"BAnana\", \"ORANGE\", \"apPLE\"};\n\n\/\/ Sort the strings first ascending by their length and\n\/\/ then descending using a custom case insensitive comparer.\nIEnumerable&lt;string&gt; query =\n    fruits3.OrderBy(fruit =&gt; fruit.Length)\n        .ThenByDescending(fruit =&gt; fruit, new CaseInsensitiveComparer());\nforeach (string fruit in query) {\n  Console.WriteLine(fruit);\n}\n\/\/\u65e0ThenByDescending\u65f6\uff0c\u6ce8\u610f\u89c2\u5bdf\u957f\u5ea6\u4e00\u81f4\u7684\u5355\u8bcd\u6392\u5e8f\n\/*\n * apPLe\n * apple\n * APple\n * apPLE\n * baNanA\n * orange\n * BAnana\n * ORANGE\n *\/\n\/\/\u6709ThenByDescending\u65f6\uff0c\u6ce8\u610f\u89c2\u5bdf\u957f\u5ea6\u4e00\u81f4\u7684\u5355\u8bcd\u6392\u5e8f\n\/*\n * apPLe\n * apple\n * APple\n * apPLE\n * orange\n * ORANGE\n * baNanA\n * BAnana\n *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">53.ToArray<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Package&gt; packages = new List&lt;Package&gt;{\n    new Package{Company = \"Coho Vineyard\", Weight = 25.2},\n    new Package{Company = \"Lucerne Publishing\", Weight = 18.7},\n    new Package{Company = \"Wingtip Toys\", Weight = 6.0},\n    new Package{Company = \"Adventure Works\", Weight = 33.8}};\n\nstring&#91;] companies = packages.Select(pkg =&gt; pkg.Company).ToArray();\n\nforeach (string company in companies) {\n  Console.WriteLine(company);\n}\n\/*\n *Coho Vineyard\n *Lucerne Publishing\n *Wingtip Toys\n *Adventure Works\n *\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">54.ToDirectory<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;Package&gt; packages =\n    new List&lt;Package&gt;{new Package{Company = \"Coho Vineyard\", Weight = 25.2,\n                                    TrackingNumber = 89453312L},\n                       new Package{Company = \"Lucerne Publishing\",\n                                    Weight = 18.7, TrackingNumber = 89112755L},\n                       new Package{Company = \"Wingtip Toys\", Weight = 6.0,\n                                    TrackingNumber = 299456122L},\n                       new Package{Company = \"Adventure Works\", Weight = 33.8,\n                                    TrackingNumber = 4665518773L}};\n\n\/\/ Create a Dictionary of Package objects,\n\/\/ using TrackingNumber as the key.\nDictionary&lt;long, Package&gt; dictionary =\n    packages.ToDictionary(p =&gt; p.TrackingNumber);\n\nforeach (KeyValuePair&lt;long, Package&gt; kvp in dictionary) {\n  Console.WriteLine(\"Key {0}: {1}, {2} pounds\", kvp.Key, kvp.Value.Company,\n                    kvp.Value.Weight);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>class Package {\n  public string Company {\n    get;\n    set;\n  }\n  public double Weight {\n    get;\n    set;\n  }\n  public long TrackingNumber {\n    get;\n    set;\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">55.ToHashSet<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProductA : IEquatable&lt;ProductA&gt; {\n  public string Name {\n    get;\n    set;\n  }\n  public int Code {\n    get;\n    set;\n  }\n\n  public bool Equals(ProductA other) {\n    if (other is null) return false;\n\n    return this.Name == other.Name &amp;&amp; this.Code == other.Code;\n  }\n\n  public override bool Equals(object obj) =&gt; Equals(obj as ProductA);\n  public override int GetHashCode() =&gt;(Name, Code).GetHashCode();\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProductB {\n  public string Name {\n    get;\n    set;\n  }\n  public int Code {\n    get;\n    set;\n  }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] a = new int&#91;]{1, 2, 3, 4, 5, 4, 3, 2, 1};\nConsole.WriteLine(JsonConvert.SerializeObject(a.ToHashSet()));  \/\/&#91;1,2,3,4,5]\nList&lt;ProductA&gt; pets5 = new List&lt;ProductA&gt;{\n    new ProductA{Name = \"Peanut\", Code = 9},\n    new ProductA{Name = \"Turbo\", Code = 2},\n    new ProductA{Name = \"Peanut\", Code = 9},\n};\nConsole.WriteLine(JsonConvert.SerializeObject(\n    pets5\n        .ToHashSet()));  \/\/&#91;{\"Name\":\"Peanut\",\"Code\":9},{\"Name\":\"Turbo\",\"Code\":2}]\nList&lt;ProductB&gt; pets6 = new List&lt;ProductA2&gt;{\n    new ProductB{Name = \"Peanut\", Code = 9},\n    new ProductB{Name = \"Turbo\", Code = 2},\n    new ProductB{Name = \"Peanut\", Code = 9},\n};\nConsole.WriteLine(JsonConvert.SerializeObject(pets6.ToHashSet(\n    new ProductBComparer())));  \/\/&#91;{\"Name\":\"Peanut\",\"Code\":9},{\"Name\":\"Turbo\",\"Code\":2}]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProductBComparer : IEqualityComparer&lt;Product&gt; {\n  bool IEqualityComparer&lt;ProductB&gt;.Equals(ProductB? x, ProductB? y) {\n    if (x is null || y is null) return false;\n\n    return x.Name == y.Name &amp;&amp; x.Code == y.Code;\n  }\n\n  int IEqualityComparer&lt;ProductB&gt;.GetHashCode(ProductB obj) {\n    return (obj.Name, obj.Code).GetHashCode();\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">56.ToList<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] a = new int&#91;]{1, 2, 3, 4, 5, 4, 3, 2, 1};\nConsole.WriteLine(\n    JsonConvert.SerializeObject(a.ToList()));  \/\/&#91;1,2,3,4,5,4,3,2,1]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">57.ToLookup \u5206\u7ec4<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class PackageB {\n  public string Company {\n    get;\n    set;\n  }\n  public double Weight {\n    get;\n    set;\n  }\n  public long TrackingNumber {\n    get;\n    set;\n  }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Create a list of Packages.\nList&lt;PackageB&gt; packages = new List&lt;PackageB&gt;{\n    new PackageB{Company = \"Coho Vineyard\", Weight = 25.2,\n                 TrackingNumber = 89453312L},\n    new PackageB{Company = \"Lucerne Publishing\", Weight = 18.7,\n                 TrackingNumber = 89112755L},\n    new PackageB{Company = \"Wingtip Toys\", Weight = 6.0,\n                 TrackingNumber = 299456122L},\n    new PackageB{Company = \"Contoso Pharmaceuticals\", Weight = 9.3,\n                 TrackingNumber = 670053128L},\n    new PackageB{Company = \"Wide World Importers\", Weight = 33.8,\n                 TrackingNumber = 4665518773L}};\n\n\/\/ Create a Lookup to organize the packages.\n\/\/ Use the first character of Company as the key value.\n\/\/ Select Company appended to TrackingNumber\n\/\/ as the element values of the Lookup.\nILookup&lt;char, string&gt; lookup = packages.ToLookup(\n    p =&gt; p.Company&#91;0], p =&gt; p.Company + \" \" + p.TrackingNumber);\n\n\/\/ Iterate through each IGrouping in the Lookup.\nforeach (IGrouping&lt;char, string&gt; packageGroup in lookup) {\n  \/\/ Print the key value of the IGrouping.\n  Console.WriteLine(packageGroup.Key);\n  \/\/ Iterate through each value in the\n  \/\/ IGrouping and print its value.\n  foreach (string str in packageGroup) Console.WriteLine(\"    {0}\", str);\n}\n\/*\n *\nC\nCoho Vineyard 89453312\nContoso Pharmaceuticals 670053128\nL\nLucerne Publishing 89112755\nW\nWingtip Toys 299456122\nWide World Importers 4665518773*\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">58.TryGetNonEnumeratedCount \u5c1d\u8bd5\u5728\u4e0d\u679a\u4e3e\u7684\u60c5\u51b5\u4e0b\u83b7\u53d6\u5e8f\u5217\u4e2d\u5143\u7d20\u6570\u91cf<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] a = new int&#91;]{1, 2, 3, 4, 5, 4, 3, 2, 1};\na.TryGetNonEnumeratedCount(out int theCount);\nConsole.WriteLine(theCount);  \/\/ 9<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">59.Union \u8054\u5408\uff08\u4f1a\u53bb\u91cd\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProductA : IEquatable&lt;ProductA&gt; {\n  public string Name {\n    get;\n    set;\n  }\n  public int Code {\n    get;\n    set;\n  }\n\n  public bool Equals(ProductA other) {\n    if (other is null) return false;\n\n    return this.Name == other.Name &amp;&amp; this.Code == other.Code;\n  }\n\n  public override bool Equals(object obj) =&gt; Equals(obj as ProductA);\n  public override int GetHashCode() =&gt;(Name, Code).GetHashCode();\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] ints1 = {5, 3, 9, 7, 5, 9, 3, 7};\nint&#91;] ints2 = {8, 3, 6, 4, 4, 9, 1, 0};\n\nIEnumerable&lt;int&gt; union\n= ints1.Union(ints2);\n\nforeach (int num in union) {\n  Console.Write(\"{0} \", num);  \/\/ 5 3 9 7 8 6 4 1 0\n}\nConsole.WriteLine();\n\nProductA&#91;] store1 = {new ProductA{Name = \"apple\", Code = 9},\n                     new ProductA{Name = \"orange\", Code = 4}};\n\nProductA&#91;] store2 = {new ProductA{Name = \"apple\", Code = 9},\n                     new ProductA{Name = \"lemon\", Code = 12}};\nIEnumerable&lt;ProductA&gt; union2 = store1.Union(store2);\nConsole.WriteLine(JsonConvert.SerializeObject(\n    union2));  \/\/&#91;{\"Name\":\"apple\",\"Code\":9},{\"Name\":\"orange\",\"Code\":4},{\"Name\":\"lemon\",\"Code\":12}]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">60.UnionBy \u5c06\u51fd\u6570\u5904\u7406\u540e\u7684\u7ed3\u679c\u8054\u5408<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var a = new&#91;]{1, 2, 3, 4, 5, 6, 7};\nvar b = new&#91;]{4, 5, 6, 7, 8, 9, 10};\nFunc&lt;int, string&gt; transform = i =&gt; i.ToString();\n\nvar result = a.UnionBy(b, transform);\n\nConsole.WriteLine(JsonConvert.SerializeObject(\n    result));  \/\/\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">61.Where<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;string&gt; fruits2 =\n    new List&lt;string&gt;{\"apple\",  \"passionfruit\", \"banana\", \"mango\",\n                     \"orange\", \"blueberry\",    \"grape\",  \"strawberry\"};\n\nIEnumerable&lt;string&gt; query = fruits2.Where(fruit =&gt; fruit.Length &lt; 6);\n\nforeach (string fruit in query) {\n  Console.WriteLine(fruit);\n}\n\/\/ apple mango grape<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">62.Zip \u7ed3\u5408\u4e24\u4e2a\u96c6\u5408<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>int&#91;] numbers = {1, 2, 3, 4};\nstring&#91;] words = {\"one\", \"two\", \"three\"};\n\nvar numbersAndWords =\n    numbers.Zip(words, (first, second) =&gt; first + \" \" + second);\n\nforeach (var item in numbersAndWords) Console.WriteLine(item);\n\/*\n * 1 one\n * 2 two\n * 3 three\n *\/<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u63d0\u4f9b\u4e00\u7ec4\u9759\u6001\u65b9\u6cd5\u7528\u4e8e\u67e5\u8be2\u5b9e\u73b0IEnumerable&lt;T&gt;\u7684\u5bf9\u8c61\u3002 Methods 1.Aggreg [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19],"tags":[26],"_links":{"self":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/320"}],"collection":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=320"}],"version-history":[{"count":10,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/320\/revisions"}],"predecessor-version":[{"id":332,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/320\/revisions\/332"}],"wp:attachment":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}