static void Main() { //public delegate bool Predicate<in T>(T obj); //Predicate<int> evenLogic = (x) => x % 2 == 0; //public delegate TResult Func<in T, out TResult>(T arg); Func <int, bool> oddlogic = (num) => num % 2 != 0; List <int> numbers = new List <int> { 1, 3, 4, 2, 6, 5, 9, 7, 0, 8 }; //Method query syntax //var resultOP = numbers.Where(oddlogic).OrderBy(num => num).ToList<int>(); //query syntax var resultOP = from num in numbers where num % 2 == 0 orderby num ascending select num; foreach (int item in resultOP) { Console.WriteLine(item); } //2. create an object of delegate and pass the function to the constructor of the delegate Logic logicCls = new Logic(); //logic.IsEven() //LogicDel oddLogic = new LogicDel(logic.IsLessrThanThree); //bool isEven = evenLogic.Invoke(12); //Console.WriteLine(isEven); //LogicDel logic = public bool IsGreaterThanFour(int number) //{ // return number > 4; //}; //anonymous method //LogicDel logic = delegate (int number) //{ // return number > 4; //}; //anonymous method through Lambda Expression // (args) =>(expression) <-- Lambda operator LogicDel <int, bool> logic = (number) => number > 4; //var result = Filter(numbers, oddLogic); var result = Filter(numbers, logic); foreach (int item in result) { Console.WriteLine(item); } }
static List <int> Filter(List <int> input, LogicDel <int, bool> logic) { List <int> result = new List <int>(); foreach (int item in input) { bool status = logic(item); if (status) { result.Add(item); } } return(result); }