BelhardTraining.DelegatesDemo.Program.Main C# (CSharp) Метод

Main() статический приватный Метод

static private Main ( string args ) : void
args string
Результат void
        static void Main(string[] args)
        {
            string[] emails = GetEmails();

            // Сортируем массив.
            // Используем полный синтаксис для работы с делегатом - new Xyz(Foo)
            Array.Sort(emails, new Comparison<string>(SortByDomain));

            #region Cокращенный синтаксис

            //// Начиная с C# 2.0 можно использовать сокращенный синтаксис
            //// Достаточно передать имя функции. Компилятор создаст экземпляр делегата самостоятельно
            //Array.Sort(emails, SortByDomain);

            #endregion

            #region Анонимный делегат

            //// Если функция нужна только в одном месте, то использование
            ////	анонимного делегата может улучшить читабельность кода
            //Array.Sort(
            //    emails,
            //    delegate(string email1, string email2)
            //    {
            //        string domain1 = email1.Substring(email1.IndexOf('@') + 1);
            //        string domain2 = email2.Substring(email2.IndexOf('@') + 1);
            //        int result = string.Compare(domain1, domain2, StringComparison.OrdinalIgnoreCase);
            //        return result == 0 ? string.Compare(email1, email2, StringComparison.OrdinalIgnoreCase) : result;
            //    }
            //);

            #endregion

            #region λ-выражения (лямбда)

            //Array.Sort(
            //    emails,
            //    (string email1, string email2)
            //    => // Это лямбда-оператор. Он отделяет список аргументов функции от её тела
            //    {
            //        string domain1 = email1.Substring(email1.IndexOf('@') + 1);
            //        string domain2 = email2.Substring(email2.IndexOf('@') + 1);
            //        int result = string.Compare(domain1, domain2, StringComparison.OrdinalIgnoreCase);
            //        return result == 0 ? string.Compare(email1, email2, StringComparison.OrdinalIgnoreCase) : result;
            //    }
            //);

            #region Типы аргументов можно опустить

            Array.Sort(
                emails,
                (email1, email2) // Мы убрали типы а аргументов т.к. компилятор может их "угадать"
                => // Это лямбда-оператор. Он отделяет список аргументов функции от её тела
                {
                    string domain1 = email1.Substring(email1.IndexOf('@') + 1);
                    string domain2 = email2.Substring(email2.IndexOf('@') + 1);
                    int result = string.Compare(domain1, domain2, StringComparison.OrdinalIgnoreCase);
                    return result == 0 ? string.Compare(email1, email2, StringComparison.OrdinalIgnoreCase) : result;
                }
            );

            #endregion

            #region λ-выражения для функций с одной return строкой

            //Array.Sort(
            //    emails,
            //    (email1, email2)
            //    =>
            //    {
            //        return string.Compare(GetDomain(email1), GetDomain(email2), StringComparison.OrdinalIgnoreCase);
            //    }
            //);

            //Array.Sort(
            //    emails,
            //    (email1, email2) => string.Compare(GetDomain(email1), GetDomain(email2), StringComparison.OrdinalIgnoreCase)
            //);

            #endregion

            #endregion

            foreach (string email in emails)
            {
                Console.WriteLine(email);
            }
        }