Не выполняется сортировка по номеру самолёта C#

Не могу понять в чём проблема Вот сам код

using System.Numerics;
using System.Xml.Serialization;
public enum PlaneType
{
    None,
    AirbusA310,
    AirbusA320,
    Boeing731,
    Boeing747,
    Boeing748,
    AirbusA321,
    AirbusA3222,
    
}
 
//Базовый абстрактный класс "Самолет"
[XmlInclude(typeof(PassangerPlane))]
[XmlInclude(typeof(CargoAircraft))]
public abstract class Plane
{
    private static readonly Dictionary<PlaneType, double> _emptyWeights =
        new Dictionary<PlaneType, double>
        {
            [PlaneType.AirbusA310] = 100,
            [PlaneType.AirbusA320] = 100,
            [PlaneType.Boeing731] = 100,
            [PlaneType.Boeing747] = 100,
            [PlaneType.Boeing748] = 100,
            [PlaneType.AirbusA321] = 100,
            [PlaneType.AirbusA3222] = 100,
        };
 
    protected PlaneType _planeType;
    protected double _emptyWeight;
 
    protected Plane() { }
 
    protected Plane(PlaneType type, string number,string fcs)
    {
        Type = type;
        Number = number;
        Fcs = fcs;
    }
 
 
    //Тип самолета (определяет вес без груза)
    public PlaneType Type
    {
        get { return _planeType; }
        set
        {
            _planeType = value;
            _emptyWeight = _emptyWeights[_planeType];
        }
    }
 
    //Серийный номер
 
    public string Number { get; set; }
    public string Fcs { get; set; }
 
 
    //Взлетный вес (переопределяется в наследниках)
    public abstract double TakeOffWeight { get; }
 
}
 
//Пассажирский самолет
 
public class PassangerPlane : Plane
{
    private const double K = 62;
 
    public PassangerPlane() { }
 
    public PassangerPlane(PlaneType type, string number,string fcs, int count)
        : base(type, number,fcs)
    {
        Count = count;
    }
    public int Count { get; set; }
 
    public override double TakeOffWeight
    {
        get { return K * Count + _emptyWeight; }
    }
 
}
 
//Грузовой самолет
 
public class CargoAircraft : Plane
{
    public CargoAircraft() { }
 
    public CargoAircraft(PlaneType type, string number,string fcs, double weight)
        :base(type, number,fcs)
    {
        CargoWeight = weight;
    }
 
    //Вес груза
 
    public double CargoWeight { get; set; }
 
    public override double TakeOffWeight
    {
        get { return CargoWeight + _emptyWeight; }
    }
 
}
public class Airline
{
    private readonly List<Plane> _planes = new List<Plane> ();
 
    //Суммарный вес всех самолетов
 
    public double TotalWeight
    {
        get
        {
            double weight = 0;
 
            foreach (var plane in _planes)
                weight += plane.TakeOffWeight;
 
            return weight;
 
        }
    }
    //Добавить самолет
    public void Add(Plane plane)
    {
        if(plane == null || plane.Type == PlaneType.None
            || string.IsNullOrEmpty(plane.Number)) 
        {
            throw new ArgumentException(nameof(plane));
        }
        _planes.Add(plane);
    }
 
 
 
 
    //Выдать список самолетов
 
    public IEnumerable<Plane> GetPlanes()
    {
        return _planes;
    }
 
    //класс сортировки по весу
    private class ByWeightComparer : IComparer<Plane>
    {
        public int Compare(Plane x,Plane y)
        {
            return x.TakeOffWeight.CompareTo(y.TakeOffWeight);
        }
    }
 
    //Отсортировать по взлетному весу
 
    public void SortByWeight()
    {
        _planes.Sort(new ByWeightComparer());
        
    }
 
    //Сортировка по номеру
    private class ByNumberComparer : IComparer<Plane>
    {
        public int Compare(Plane x, Plane y)
        {
            return x.Number.CompareTo(y.Number);
        }
    }
 
    public void SortByNumber()
    {
        _planes.Sort(new ByNumberComparer());
    }
 
 
    //Сериализовать в XML-файл
 
    public void ToXml(string fileName)
    {
        var serializer = new XmlSerializer(typeof(List<Plane>));
 
        using (var stream = File.OpenWrite(fileName))
        {
            serializer.Serialize(stream, _planes);
            stream.Flush();
        }
    }
 
    //Дисериализовать из XML-файла
 
    public static Airline FromXml(string fileName)
    {
        var airline = new Airline();
        var serializer = new XmlSerializer(typeof(List<Plane>));
 
       using (var stream = File.OpenRead(fileName))
        {
            var planes = serializer.Deserialize(stream) as IEnumerable<Plane>;
            if (planes != null) airline._planes.AddRange(planes);
        }
        return airline;
    }
 
 
}
 
public class Program
{
    static void Main()
    {
        var myAirline = new Airline();
 
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA320, "RF-0005", "КрасновАА", 150));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing731, "RF-0004", "КочерыжкинВФ", 500));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA310, "RF-0007", "БулочкинВВ", 110));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing748, "RF-0002", "ГрейнсГГ", 500));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA3222, "RF-0003", "ЯшкинЯЯ", 140));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing747, "RF-0001", "ЩенковФФ", 55));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA321, "RF-0006", "СуворовАА", 100));
 
        const string fileName = @"D:\Airline1.xml";
        myAirline.ToXml(fileName);
 
        bool a = true;
        while (a)
        {
            char s = Console.ReadKey().KeyChar;
            switch (s)
            {
                case '0':
 
                    try
                    {
                        var myAirlineNew = Airline.FromXml(fileName);
                        var planesList = myAirline.GetPlanes().ToList();                     
                            for (int count = 0; count < planesList.Count() - 1; count++)
                            {
                                if (planesList[count].TakeOffWeight == planesList[count + 1].TakeOffWeight)
                                {
 
                                    myAirline.SortByNumber();
 
                                }
                                else myAirline.SortByWeight();
 
                            }
                        
 
                        foreach (var plane in myAirline.GetPlanes())
                        {
                           
 
                            Console.WriteLine($"Plane: {plane.Type}" +
                                              $",{plane.Number}" +
                                              $",{plane.Fcs}" +
                                              $",{plane.TakeOffWeight} kg");
 
                        }
 
 
                        Console.WriteLine($"\nTotalWeight = {myAirlineNew.TotalWeight}");
 
                    }
                    catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); }
                    break;
 
                case '5':
                    a = false;
                    Console.WriteLine("Вы вышли из программы!");
                    break;
                default:
                    Console.WriteLine("Не правильно,попробуйте ещё раз");
                    break;
            }
 
 
        }
        
        
    }
}


Вот если я вывожу список самолётов в консоль с разными весами, то всё сортируется правильно, но как только я сделаю одинаковый вес двум или нескольким самолётам, то программа выводит не отсортированный список.Вроде сортировку по номеру сделал верно.

 try
                    {
                        var myAirlineNew = Airline.FromXml(fileName);
                        var planesList = myAirline.GetPlanes().ToList();                     
                            for (int count = 0; count < planesList.Count() - 1; count++)
                            {
                                if (planesList[count].TakeOffWeight == planesList[count + 1].TakeOffWeight)
                                {
 
                                    myAirline.SortByNumber();
 
                                }
                                else myAirline.SortByWeight();
 
                            }
                        
 
                        foreach (var plane in myAirline.GetPlanes())
                        {
                           
 
                            Console.WriteLine($"Plane: {plane.Type}" +
                                              $",{plane.Number}" +
                                              $",{plane.Fcs}" +
                                              $",{plane.TakeOffWeight} kg");
 
                        }

Ответы (1 шт):

Автор решения: Aziz Umarov

Может быть надо выходить из цикла (не ясен смысл его конечно) как только отсортировали

                        for (int count = 0; count < planesList.Count() - 1; count++)
                        {
                            if (planesList[count].TakeOffWeight == planesList[count + 1].TakeOffWeight)
                            {

                                myAirline.SortByNumber();
                                break;      

                            }
                            else 
                            {
                                myAirline.SortByWeight();
                                break;
                            }
                        }

иначе я так понимаю у вас так и будет без конца сортироваться один и тот же список

→ Ссылка