ArrayList<Bike>.Sort c#

203
14 апреля 2018, 18:25
using System;
using System.Collections;
using System.Collections.Generic;
namespace BikeFinal
{
class Bike : IComparable<Bike>
{
    private string Name { get; set; }
    private string Producer { get; set; }
    private double Price { get; set; }

    public Bike() { }
    public Bike(string name, string producer, double price)
    {
        Name = name;
        Producer = producer;
        Price = price;
    }
    public override string ToString()
    {
        return $"name={Name} producer={Producer} price={Price}";
    }
    public int CompareTo(Bike other)
    {
        return other.Price.CompareTo(Price);
    }
}
//далее классы, наследники от Bike(Monatin, ElectroBike, Urban, Crosscountry), которые я вырезал из за ненадобности
abstract class Container
{
    public virtual void Add(Bike b) { }
    public virtual void Remove(int index) { }
    public virtual void Remove(Bike b) { }
    public virtual void Sort() { }
}

class ArrayListContainer : Container
{
    //private System.Collections.Generic.List<Bike> arrayList = new List<Bike>();
    private ArrayList arrayList = new ArrayList();
    public ArrayListContainer()
    {
    }
    public override void Add(Bike b)
    {
        arrayList.Add(b);
    }
    public override void Remove(Bike b)
    {
        if (arrayList.Contains(b))
            arrayList.Remove(arrayList.IndexOf(b));
    }
    public override void Remove(int index)
    {
        if (index < arrayList.Count)
            arrayList.RemoveAt(index);
    }
    public override void Sort()
    {
        arrayList.Sort();
    }
    public override string ToString()
    {
        string res = "ArrayListContainer";
        foreach (Bike b in arrayList)
        {
            res += "\n\t" + b.ToString();
        }
        return res;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ArrayListContainer bikes = new ArrayListContainer();

        bikes.Add(new Bike("xf14", "Cannondale", 14.0d));
        bikes.Add(new Bike("gf43", "Cannondale", 17.7d));
        bikes.Add(new Bike("vsd", "Cannondale", 13.4d));
        Console.WriteLine(bikes);
        bikes.Sort();
        Console.ReadLine();
    }
}
}

В результате чего не сортируется лист велосипедов по цене. Выбрасывается ошибка

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Сбой при сравнении двух элементов массива.

Answer 1
using System;
using System.Collections.Generic;
namespace BikeFinal
{
    class Bike : IComparable<Bike>
    {
        private string Name { get; set; }
        private string Producer { get; set; }
        private double Price { get; set; }

        public Bike() { }
        public Bike(string name, string producer, double price)
        {
            Name = name;
            Producer = producer;
            Price = price;
        }
        public override string ToString()
        {
            return $"name={Name} producer={Producer} price={Price}";
        }
        public int CompareTo(Bike other)
        {
            return other.Price.CompareTo(Price);
        }
    }
    abstract class Container
    {
        public virtual void Add(Bike b) { }
        public virtual void Remove(int index) { }
        public virtual void Remove(Bike b) { }
        public virtual void Sort() { }
    }

    class ArrayListContainer : Container
    {
        private List<Bike> arrayList = new List<Bike>();
        public ArrayListContainer()
        {
        }
        public override void Add(Bike b)
        {
            arrayList.Add(b);
        }
        public override void Remove(Bike b)
        {
            if (arrayList.Contains(b))
                arrayList.Remove(b);
        }
        public override void Remove(int index)
        {
            if (index < arrayList.Count)
                arrayList.RemoveAt(index);
        }
        public override void Sort()
        {
            arrayList.Sort();
        }
        public override string ToString()
        {
            string res = "ArrayListContainer";
            foreach (Bike b in arrayList)
            {
                res += "\n\t" + b.ToString();
            }
            return res;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ArrayListContainer bikes = new ArrayListContainer();

            bikes.Add(new Bike("xf14", "Cannondale", 14.0d));
            bikes.Add(new Bike("gf43", "Cannondale", 17.7d));
            bikes.Add(new Bike("vsd", "Cannondale", 13.4d));
            Console.WriteLine(bikes);
            bikes.Sort();
            Console.WriteLine(bikes);
            Console.ReadLine();
        }
    }
}
READ ALSO
Почему часть функций веб-сервисов не доступны в Xamarin?

Почему часть функций веб-сервисов не доступны в Xamarin?

Работаю с XamarinСоздал переносимую библиотеку классов, добавил веб-сервис, после чего оказалось что некоторые функции самого сервиса отсутствуют

132
Как вывести окно в браузере &ldquo;осторожно вредоносное ПО&rdquo; в WinForm на с#? [требует правки]

Как вывести окно в браузере “осторожно вредоносное ПО” в WinForm на с#? [требует правки]

Программа сканирует все get запросы пользователя, с помощью прокси Titanium Web Proxy, и если она обнаружит,что пользователь пытается зайти на веб-страницу,...

146
Xamarin ListView, свои ячейки

Xamarin ListView, свои ячейки

Вообще, мой цель это сделать список графиков (Microcharts)

185
C# Открытие архива через внешнее приложение

C# Открытие архива через внешнее приложение

Подскажите пожалуйста, как можно открывать архивы через внешнее приложение(explorer или всякие архиваторы)? Пробовал через ProcessStart , но почему...

142