Zagadka z sortowaniem listy

    public class IntWrapper
    {
        public int Value { get; protected set; }

        public IntWrapper(int value)
        {
            Value = value;
        }
    }

    public void Foo()
    {
        var wrappers = new List<IntWrapper>();

        wrappers.Add(new IntWrapper(1));

        wrappers.Sort();

        Console.WriteLine(wrappers[0].Value);
    }

Co (jeśli w ogóle) zostanie wypisane na konsoli?

Po odpowiedź przewiń w dół.

IComparable

Ja spodziewałem się wyjątku InvalidOperationException, który opakowuje ArgumentException (czyli jako InnerException). Wydawało mi się że metoda Sort() sprawdza na wejściu, czy typ generyczny implementuje interfejs IComparable i rzuca wyjątkiem jeśli nie.

Myliłem się, ponieważ jest tylko jeden element i nie trzeba nic sortować. Taki edge case na dziś 😉 Na konsoli zostanie wypisane „1”.

Gdyby jednak metoda Foo() dodawała więcej elemntów

    public void Foo()
    {
        var wrappers = new List<IntWrapper>();

        wrappers.Add(new IntWrapper(1));
        wrappers.Add(new IntWrapper(0));

        wrappers.Sort();

        Console.WriteLine(wrappers[0].Value);
    }

wtedy rzeczywiście zobaczymy wymieniony wcześniej wyjątek jak na rysunku.

IComparable Not Implemented InvalidOperationException

Reklamy
Ten wpis został opublikowany w kategorii Uncategorized i oznaczony tagami , . Dodaj zakładkę do bezpośredniego odnośnika.