Как правильно написать условие для if?

Не получается в if задать проверку данного условия(возможно я не правильно прохожусь if ом по моей коллекции?)

Само задание - "Упорядочить всю последовательность авиалайнеров по возрастанию взлетного веса. При совпадении взлетного веса – упорядочивать данные по номеру рейса."

Вопрос в следующем
Как правильно написать if чтобы он проверил каждый элемент коллекции и если хоть где то есть одинаковый вес (Самолёта,переменная TakeOffWeight), то сразу применял сортировку по номеру (SortByNumber)?

    using System.Numerics;
    using System.Xml.Serialization;
    public enum PlaneType
    {
    None,
    AirbusA310,
    AirbusA320,
    Boeing731,
    Boeing747,
    Boeing748,
    AirbusA321,
    AirbusA322,
    
    }

    //Базовый абстрактный класс "Самолет"
    [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.AirbusA322] = 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-0006","КрасновАА", 1000));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing731, "RF-0005", "КочерыжкинВФ", 500));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA310, "RF-0008", "БулочкинВВ", 110));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing748, "RF-0002", "ГрейнсГГ", 500));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA322, "RF-0004", "ЯшкинЯЯ", 130));
        myAirline.Add(new CargoAircraft(PlaneType.Boeing747, "RF-0001", "ЩенковФФ", 55));
        myAirline.Add(new PassangerPlane(PlaneType.AirbusA321, "RF-0007", "СуворовАА", 100));


        
 




        const string fileName = @"D:\Airline.xml";
        myAirline.ToXml(fileName);

        try
        {
            var myAirlineNew = Airline.FromXml(fileName);
            foreach (var plane in myAirline.GetPlanes().ToList())
            {
                if (plane.TakeOffWeight == plane.TakeOffWeight + 1)
                {

                    myAirline.SortByNumber();

                }
                else myAirline.SortByWeight();

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

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

Автор решения: WinnerIT

Такое условие всегда будет false. Вы сравниваете сум. вес самолета с сум. весом +1 того же самолета только

Вам нужно что- то на подобии:

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");

        }

        }

Где пробегаете по всему списку и сравниваете актуальный самолет с предыдущим или следующим.

→ Ссылка