Exemple #1
0
        //  static CalArepointer cpointer = CalculateArea;

        static void Main(string[] args)
        {
            //CalArepointer cpointer = new CalArepointer(delegate (int r)
            //{
            //    return 3.14 * r * r;
            //});

            //double Area = cpointer(20);

            //more short and sweeter by using Lambda + Func
            CalArepointer         Cpointer = r => 3.12 * r * r;
            var                   Area     = Cpointer(20);
            Func <double, double> cpoiner  = r => 3.13 * r * r;
            var                   Area2    = cpoiner(20);

            Action <string> MyPrinter = y => Console.WriteLine(y);

            MyPrinter("Hello");



            Console.ReadLine();
        }
        /// <summary>
        /// From Video: https://www.youtube.com/watch?v=8o0O-vBS8W0
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //methode 1: Deklaration Delegate + Invoke
            CalArepointer calPointer = CalculateArea;
            double        area       = calPointer(4); //gleich wie calPointer.Invoke(4);


            //methode 2: Lambda Anonymous Methods, code shorter
            CalArepointer calPointer2 = new CalArepointer(
                delegate(int r)
            {
                return(3.14 * r * r);
            });
            double area3 = calPointer2(4);

            //methode 3: Lambda Expression, code short and sweet
            CalArepointer calPointer3 = (int r) => 3.14 * r * r;
            double        area2       = calPointer3(4);

            //methode 4: Lambda Expression + Func, code shorter and even more sweeter
            Func <int, Double> calPointer4 = (int r) => 3.14 * r * r;
            double             area4       = calPointer4(4);

            // Action Delegate (FUNC ohne Return-Value, VOID)
            Action <string> myAction = y => Console.WriteLine(y);

            myAction("Saliii");

            // Predicate (Extension zur Func), for checking purpose
            // you can replace Predicate with Func, in other words predicate delegate can be avoided.
            Predicate <string> CheckGreaterThan5 = x => x.Length > 5;

            CheckGreaterThan5("test"); //--> gibt 'false' zurück


            ///////////////////
            // Warum delegates verwenden?

            List <string> lString = new List <string>();

            lString.Add("Sali");
            lString.Add("Sali Fabian");
            lString.Add("Sali Thomas");

            //Find-predicate gibt hier jeden value der Liste in das Predicate rein und checkt, ob die Bedingung zutrifft. Falls ja, wird dieses zurückgegeben
            lString.Find(CheckGreaterThan5);           //gibt Sali Fabian zurück, weil es der erste Value ist, der dem Predicate entspricht.
            lString.FindAll(CheckGreaterThan5);        // gibt alle zurück
            lString.Any <string>();                    //true
            lString.Any <string>((s) => s.Length > 5); //true


            //////////////////
            /// Important use of Lambda Expression: Expression Trees
            /// for example (10+20) - (5 + 3)

            // 10 + 20
            BinaryExpression b1 = Expression.MakeBinary(ExpressionType.Add,
                                                        Expression.Constant(10),
                                                        Expression.Constant(20));

            // 5 + 3
            BinaryExpression b2 = Expression.MakeBinary(ExpressionType.Add,
                                                        Expression.Constant(5),
                                                        Expression.Constant(3));

            // (10 + 20) - (5 + 3)
            BinaryExpression b3 = Expression.MakeBinary(ExpressionType.Subtract,
                                                        b1,
                                                        b2);

            // This statement will create a delegate by parsing the expression tree
            int result = Expression.Lambda <Func <int> >(b3).Compile()();

            // LINQ Expression Tree
            var x = (from c in lString
                     where c.)
        }