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(); } } } 

As a result, the list of bicycles is not sorted by price. An error is thrown.

Unhandled exception of type "System.InvalidOperationException" in mscorlib.dll

Additional information: Failure when comparing two elements of an array.

  • Maybe other or price null? Try to compare this case in comparison - Chad
  • one
    And why do you use prehistoric ArrayList? - VladD

1 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(); } } } 
  • I think it makes sense to make a Container not an abstract class, but an interface: it does not carry shared code. - VladD