using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SampleConsoleAppDelegate { //This is a delegate type //public delegate void LogDelegate(string message); internal class Program { public class Model { public int A { get; set; } public string B { get; set; } } public delegate void LogDelegate(string message); static void Main(string[] args) { //This is a variable of type of delegate LogDelegate myLogger; Action myLogger2; Func myLogger3; //This is assigning the delegate variable by an instance of the delegate myLogger = Log; myLogger2 = Log2; myLogger3 = Log3; //Or the following syntax: //myLogger = new LogDelegate(Log); //Or the following syntax: //myLogger = (message) => Console.WriteLine(message); //Or the following syntax: //myLogger = delegate (string message) { Console.WriteLine(message); }; //This is calling the delegate if (myLogger != null) myLogger("This is a message!"); // Or the following Syntax: myLogger?.Invoke("This is a message 2!"); myLogger2?.Invoke(4, "Test with action"); bool ret = myLogger3.Invoke(4, "Test with func"); var list = new[] { new Model {A= 1, B= "One"}, new Model { A= 2, B= "Two"}, new Model { A= 3, B= "Three"}, }.ToList(); var item = list.Find(x => x.A == 52); //var item = list.Find(new Predicate(x => x.A == 2)); //var item = list.Find(MyPredicate); var item2 = list.Find(x => MyPredicate(x)); Console.WriteLine("Press enter to exit."); Console.ReadLine(); } private static void Log(string message) { Console.WriteLine(message); } private static void Log2(int id, string message) { Console.WriteLine($"{id}, {message}"); } private static bool Log3(int id, string message) { Console.WriteLine($"{id}, {message}"); return true; } static bool MyPredicate(Model input) { return input.A == 2; } } }