Example #1
0
        static void Main(string[] args)
        {
            var products = new MyCollection <Product>();

            products.Add(new Product()
            {
                Id = 108, Name = "Pen", Cost = 221, Units = 12
            });
            products.Add(new Product()
            {
                Id = 102, Name = "Hen", Cost = 218, Units = 62
            });
            products.Add(new Product()
            {
                Id = 106, Name = "Ken", Cost = 217, Units = 92
            });
            products.Add(new Product()
            {
                Id = 101, Name = "Ten", Cost = 245, Units = 27
            });
            products.Add(new Product()
            {
                Id = 109, Name = "Den", Cost = 223, Units = 23
            });
            products.Add(new Product()
            {
                Id = 105, Name = "Len", Cost = 210, Units = 24
            });

            Console.WriteLine("Initial List");
            Console.WriteLine("Total Productsa = {0}", products.Count());
            Console.WriteLine("=========================================");
            foreach (var product in products)
            {
                Console.WriteLine(product);
            }

            /*var enumerator = (IEnumerator) products;
             * while (enumerator.MoveNext())
             * {
             * var current = (Product) enumerator.Current;
             * Console.WriteLine(current);
             * }*/

            /*for(var i=0;i<products.Count;i++)
             *  Console.WriteLine(products[i]);
             */
            Console.WriteLine("=========================================");
            Console.WriteLine("Products sorted by default order");
            Console.WriteLine("=========================================");
            products.Sort();
            foreach (var product in products)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");
            Console.WriteLine("Products sorted by Cost");
            Console.WriteLine("=========================================");
            products.Sort(new ProductComparerByCost());
            foreach (var product in products)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");

            Console.WriteLine("Products sorted by Units");
            Console.WriteLine("=========================================");
            products.Sort(new ProductComparerByUnits());
            foreach (var product in products)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");
            Console.WriteLine("Products sorted by Cost [using Delegates]");
            Console.WriteLine("=========================================");
            //Using explicit methods
            //products.Sort(Program.CompareProductByCost);

            //Using Anonymous Methods

            /*products.Sort(delegate (Product left, Product right)
             * {
             *  if (left.Cost > right.Cost) return 1;
             *  if (left.Cost < right.Cost) return -1;
             *  return 0;
             * });*/

            //Lambda Expressions
            //Step - 1

            /*products.Sort((left, right) =>
             * {
             *  if (left.Cost > right.Cost) return 1;
             *  if (left.Cost < right.Cost) return -1;
             *  return 0;
             * });*/
            //Step-2

            /*products.Sort((left, right) =>
             *  {
             *      return Math.Sign(left.Cost - right.Cost);
             *  });*/

            //Step-3
            products.Sort((left, right) => Math.Sign(left.Cost - right.Cost));

            foreach (var product in products)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");

            Console.WriteLine("Products sorted by Id [using Delegates]");
            Console.WriteLine("=========================================");
            products.Sort((left, right) => Math.Sign(left.Id - right.Id));

            foreach (var product in products)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");



            Console.WriteLine("Costly Products - cost > 220");
            Console.WriteLine("=========================================");
            var costlyProductsCriteria = new CostlyProductSearchCriteria(220);
            var costlyProducts         = products.Search(costlyProductsCriteria);

            foreach (var product in costlyProducts)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");
            Console.WriteLine("Cheap Products - cost <= 220");
            Console.WriteLine("=========================================");
            var cheapProductsCriteria = new InverseCriteria <Product>(costlyProductsCriteria);
            var cheapProducts         = products.Search(cheapProductsCriteria);

            foreach (var product in cheapProducts)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");
            Console.WriteLine("Fast moving poducts - [Search using delegates where Units < 50]");
            Console.WriteLine("================================================================");
            var fastMovingProducts = products.Search(p => p.Units < 50);

            foreach (var product in fastMovingProducts)
            {
                Console.WriteLine(product);
            }
            Console.WriteLine("=========================================");
            Console.WriteLine("Mininum Units in Products");
            Console.WriteLine("=========================================");
            Console.WriteLine(products.Min(p => p.Units));
            Console.WriteLine("Mininum Cost in Products");
            Console.WriteLine("=========================================");
            Console.WriteLine(products.Min(p => p.Cost));
            Console.WriteLine("Number of products with Units > 50");
            Console.WriteLine("=========================================");
            Console.WriteLine(products.Count(p => p.Units > 50));
            Console.ReadLine();
        }