ComparisonSmak NR.4

Podobnie jak delegaty: Predicate, Converter - delegata Comparsion istnieje głównie po to, by dać możliwość kolekcjom Array i List<T> możliwość sortowania.

Obecnie jednak nie korzystam z metody Sort, tylko z metody LINQ OrderBy.

Używanie delegaty tak, jak w poprzednich przypadkach nie ma sensu. Sama delegata istnieje dla metod np. Sort.

Delegata jest zdefiniowana następująco.

public delegate int Comparison<in T>(T x, T y);

Metoda referowana do tej delegaty musi przyjmować dwa parametry jednego typu i tego samego typu zwracać wartość.

W metodzie Sort C# na podstawie twojej podanej metody posortuje elementy kolekcji.

using System;
using System.Collections.Generic;

namespace ConsoleApplication_CSharpFun
{
    class Program
    {
        public static void Main(string[] args)
        {
            List<int> collection = new List<int>();

            collection.Add(202);
            collection.Add(270);
            collection.Add(310);
            collection.Add(910);
            collection.Add(430);
            collection.Add(18);
            collection.Add(130);

            collection.Sort(Program.CompareWithCase);

            foreach (Int32 s in collection)
                Console.WriteLine(s);
        }

        public static int CompareWithCase(int i1, int i2)
        {
            return i1.ToString().CompareTo(i2.ToString());
        }

    }
}

W przykładzie powyżej liczby zostaną posortowane wg ich kolejności alfanumerycznej napisu.

Console

 

W C# 3.0 mamy LINQ i wyrażenia lambda, oznacza to, że wyrażenie powyżej można skrócić do poniższego zapisu.

collection.Sort((i1, i2) => i1.ToString().CompareTo(i2.ToString()));

Tym wyrażeniem lambda tworzę metodę anonimową, która spełnia wymogi delegaty Comparsion.

Tym oto wpisem zamykam cykl Delegaty o 5 smakach. Prawie zapomniałem, że prowadzę taki cykl, ale wielu z was domagało się jego zakończenia.

Czy to wszystko, co można powiedzieć o delegatach w C#?

Nie.

Delegaty pełnią też ważną funkcję w programowaniu asynchronicznym, ale o tym kiedy indziej.