示例#1
0
        /// <summary>
        /// Parses while a certain condition matches.
        /// </summary>
        /// <param name="source">Source enumerator.</param>
        /// <param name="functionName">Function used to get the name of the function that should be called.</param>
        /// <param name="upper">Previous function to get the arguments from.</param>
        /// <param name="condition">Checks whether the token type of the current token matches the current.</param>
        /// <param name="error">Output error string.</param>
        /// <returns>Instance of a class that implements IExpression.</returns>
        private static IExpression ParseWhile(this IEnumerator <Token> source,
                                              UpperDelegate upper,
                                              Func <TokenType, string> functionName,
                                              Predicate <TokenType> condition,
                                              out string error)
        {
            var left = upper(source, out error);

            if (condition((TokenType)source.Current) && left is null)
            {
                return(null);
            }

            while (condition((TokenType)source.Current))
            {
                var type = (TokenType)source.Current;
                source.MatchAndEat(type, out error);

                var right = upper(source, out error);
                if (right is null)
                {
                    error = "Expected right side of the expression.";
                    return(null);
                }

                left = new FunctionCallExpression(functionName(type), left, right);
            }

            return(left);
        }
        public static void Run()
        {
            // Instantiation 1 - declared function
            UpperDelegate updel = new UpperDelegate(SomeMethod);

            // calling a method/delegate
            updel("aaa");

            // Instantiation 2 - anonymous function
            UpperDelegate updel2 = (name) => { return(name.ToUpper()); };


            // Usage in methods as parameter - declared function
            var result = UsageOfDelegate("Lukas", SomeMethod);
            // Usage in methods as parameter - anonymous function
            var result2 = UsageOfDelegate("Lukas", (name) => { return(name.ToUpper()); });
        }
 static string UsageOfDelegate(string name, UpperDelegate method)
 {
     return(method(name));
 }
示例#4
0
        static void Main(string[] args)
        {
            LogDelegate ld = () =>
            {
                // UpdateDatabase();
                // WriteToEventLog();
                return(true);
            };
            bool status = ld();

            AddDelegate   ad = (a, b) => a + b;
            UpperDelegate up = word => word.ToUpper();

            Console.WriteLine(ad(1, 1));
            Console.WriteLine(up("hello"));
            // DelegatesAndEvents.WorkPerformedHandler del1 = WorkPerformed1;
            // DelegatesAndEvents.WorkPerformedHandler del2 = WorkPerformed2;

            // del1(5, WorkType.Golf);
            // del2(10, WorkType.GenerateReports);



            // Rectangle.Union(r1, r2);
            var rectangles = new[]
            {
                new Rectangle(0, 0, 20, 20),
                new Rectangle(20, 20, 60, 60),
                new Rectangle(80, 80, 20, 20),
            };

            // Console.WriteLine(rectangles.Aggregate(Rectangle.Union));


            var numbers = Enumerable.Range(1, 10);
            var words   = new[] { "one", "two", "three" };


            // Console.WriteLine(words.Aggregate("hello", (p,x) => p + "," + x));
            // Console.WriteLine("We have " + words.Count() + " elements");
            // LINQ.ShowResultList(numbers);

            // Console.WriteLine("Sum = " +
            //                   numbers.Aggregate(
            //                       (p, x) => p+x));

            // seed 1 -> p1
            // p1 2 -> p2
            // p2 3 ...
            // Console.WriteLine("Product = " +
            //                   numbers.Aggregate(1, (p, x) => p*x));

            // var integralTypes = new[] {typeof(int), typeof(short)};
            // var floatingTypes = new[] {typeof(float), typeof(double)};
            // LINQ.ShowResultList(integralTypes
            //     .Concat(floatingTypes)
            //     .Prepend(typeof(bool)));

            // 'System.Linq.Enumerable.Prepend<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)'
            // 'ConsoleApp1.LinqDemos.ExtensionMethods.Prepend<T>(System.Collections.Generic.IEnumerable<T>, T)'

            // var numbers = new List<int> {1, 2, 3};
            // Console.WriteLine(numbers.First());
            // Console.WriteLine(numbers.First(x => x > 2));
            // Console.WriteLine(numbers.FirstOrDefault(x => x > 10));

            // Console.WriteLine(new int[]{123}.Single());
            // Console.WriteLine(new int[]{1,2,3}.SingleOrDefault()); // exception
            // Console.WriteLine(new int[]{}.SingleOrDefault()); // works on empty collection
            //
            // Console.WriteLine("Item at position 1: " + numbers.ElementAt(1));
            // Console.WriteLine("Item at position 1: " + numbers.ElementAtOrDefault(4));



            // var arr1 = new[] {1, 2, 3};
            // var arr2 = new[] {1, 2, 3};
            // Console.WriteLine(arr1 == arr2);
            // Console.WriteLine(arr1.Equals(arr2));
            //
            // Console.WriteLine(arr1.SequenceEqual(arr2));
            //
            // var list1 = new List<int>{1,2,3};
            // Console.WriteLine(arr1.SequenceEqual(list1));
            //
            //
            // var people = new Person[]
            // {
            //     new Person("Jane", "*****@*****.**"),
            //     new Person("John", "*****@*****.**"),
            //     new Person("Chris", String.Empty),
            // };
            //
            // var records = new Record[]
            // {
            //     new Record("*****@*****.**", "JaneAtFoo"),
            //     new Record("*****@*****.**", "JaneAtHome"),
            //     new Record("*****@*****.**", "John1980"),
            // };
            // foreach (var person in people)
            // {
            //     Console.WriteLine(person.Email);
            // }

            // var query = people.Join(records,
            //     person => person.Email,
            //     record => record.Mail,
            //     (person, record) => new {Name = person.Name, SkypeId = record.SkypeId}
            // );
            //
            // foreach (var item in query)
            // {
            //     Console.WriteLine(item);
            // }


            object[] values = { 1, 2.5, 3, 4.5 };
            // int[] numbers = {3, 3, 1, 2, 3, 4};
            // LINQ.ShowResultList(numbers.Skip(2).Take(1));
            // LINQ.ShowResultList(numbers.SkipWhile(i => i == 3));
            // Console.WriteLine("Are all numbers greater than 0? " +
            //                   numbers.All(x => x > 0));
            // Console.WriteLine("Are all numbers odd? " +
            //                   numbers.All(x => x % 2 == 1));
            // Console.WriteLine("Any number less than 2? " +
            //                   numbers.Any(x => x < 2));


            // LINQ.ShowResultList(FilteringSortingData.GetIntegers(values));
            IEnumerable <int>  randomNumbersEnumerable  = ProjectionOperations.GetRandomNumbers();
            string             randomNumbersString      = LINQ.DisplayListAsCsvString(randomNumbersEnumerable);
            IEnumerable <char> orderedNumbersEnumerable = randomNumbersString.OrderBy(x => x);

            // Console.WriteLine(LINQ.DisplayListAsCsvString(randomNumbersEnumerable));
            // Console.WriteLine(LINQ.DisplayListAsCsvString(randomNumbersEnumerable.OrderBy(x => x)));
            // Console.WriteLine(LINQ.DisplayListAsCsvString(randomNumbersEnumerable.OrderByDescending(x => x)));

            // string sentence = "This is a test";
            // Console.WriteLine(new string(sentence.Reverse().ToArray()));
            // string word1 = "hello";
            // string word2 = "help!";

            // LINQ.ShowResultList(word1.Distinct());

            // var lettersInBoth = word1.Intersect(word2);
            // LINQ.ShowResultList(lettersInBoth);

            // LINQ.ShowResultList(word1.Union(word2));
            // LINQ.ShowResultList(word1.Except(word2));
        }