Как сделать так, чтобы метод поиска эксемпляра с максимальной стоимостью, работал в классе car, когда в основной прогармме всё работает?

Фрагмент из основной программы

class Program
    {
        private static List<Car> cars = new List<Car>();
        private static Random rnd = new Random();
        public static string[] NMarka = new string[] { "MersBZ", "Skoda", "Toyota", "Lada", "BMW", "Mustang", "Bentley", "Audi", "Bugatti", "Ford" };
        public static Car GetMaxPriceCar()
        {
            Car maxPrice = null;
            for (int i = 0; i < cars.Count; i++)
            {
                if (maxPrice==null || cars[i].price > maxPrice.price)
                {
                    maxPrice = cars[i];
                }
            }
            return maxPrice;
        }
    }

Фрагмент из класса Car

class Car : Trans
{
        public bool TTH;
        int runing;

        public Car(int price, int power, string number, string mark, bool TTH, int runing) : base(price, power, number, mark)
        {
            this.TTH = TTH;
            this.runing = runing;
        }
        public static Car GetMaxPriceCar()
        {
            Car maxPrice = null;
            for (int i = 0; i < cars.Count; i++)
            {
                if (maxPrice == null || cars[i].price > maxPrice.price)
                {
                    maxPrice = cars[i];
                }
            }
            return maxPrice;
        }
}

cars подчёркивает(ошибка: не существует в текущем контексте)


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

Автор решения: A K

Класс Car знает только о себе и должен оперировать только своими полями и свойствами. Массив cars выступает тут в роли репозитория, хранилища машин -- и это другая обязанность, её не должно быть в классе cars. У вас же написано в классе Program нужный метод - поэтому просто не пишите ничего в классе Car. Альтернатива: в классе Car создать статический метод, в который передавать cars либо вообще создать метод расширения (extension method) Это не очень хорошо использовать static для этого, но это всё же направление в правильную сторону - думать о cars как о репозиториях и иной ответственности

void Main()
{
    // ...
}

private static List<Car> cars = new List<Car>();
private static Random rnd = new Random();
public static string[] NMarka = new string[] { "MersBZ", "Skoda", "Toyota", "Lada", "BMW", "Mustang", "Bentley", "Audi", "Bugatti", "Ford" };

// You can define other methods, fields, classes and namespaces here

public static class CarsRepository
{
    public static int MaxPrice(Car[] cars)
    {
        return cars.Max(x => x.price);
    }
    
    public static Car CarWithMaxPrice(Car[] cars)
    {
        return cars.OrderByDescending(x => x.price).FirstOrDefault();
    }
}

public class Car : Trans
{
    public bool TTH { get; protected set; }
    public int runing { get; protected set; }

    public Car(int price, int power, string number, string mark, bool TTH, int runing)
        : base(price, power, number, mark)
    {
        this.TTH = TTH;
        this.runing = runing;
    }
}

public class Trans
{
    public int price { get; protected set; }
    public int power { get; protected set; }
    public string number { get; protected set; }
    public string mark { get; protected set; }

    public Trans(int price, int power, string number, string mark)
    {
        this.price = price;
        this.power = power;
        this.number = number;
        this.mark = mark;
    }
}
→ Ссылка