ставить двойники в порядке убывания - PullRequest
0 голосов
/ 14 сентября 2018

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

Как бы я расположил Стоимость всех продуктов в порядке от наивысшего к низшемувместе с названием каждой детали, когда я ввожу команду типа "Возврат высокой стоимости к низкой"?

Вот соответствующий код:

public class AutoPart
{
    public string Name;
    public double Cost;
}

public class Liquid : AutoPart
{
    public new string Name;
    public new double Cost;      
    public double Quarts;  
}

public class tool : AutoPart
{
    public new string Name;               
    public new double Cost;
    public double SizeInMM;
}

public class Catalogue
{
    static void Main(string[] args)
    {
        AutoPart Motorcraftoilfilter = new AutoPart();
        Motorcraftoilfilter.Name = "MotorCraft Oil Filter"; 
        Motorcraftoilfilter.Cost = 6.99;

        Liquid valvolineoil = new Liquid();
        valvolineoil.Name = "Valvoline Oil";
        valvolineoil.Cost = 8.99;
        valvolineoil.Quarts = 1;

        tool Wrench = new tool();
        Wrench.Name = "Duralast 13mm Wrench";
        Wrench.Cost = 16.99;
        Wrench.SizeInMM = 13;
    }
}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Как уже упоминалось, вы можете создать список типа базового класса (AutoPart) и добавить в него все остальные типы. У вас будут только свойства базового класса, доступные для заказа, но поскольку он содержит свойства Cost и Name, вы сможете делать то, что хотите.

Затем вы можете использовать метод расширения OrderByDescending (добавьте using System.Linq в начало вашего файла), чтобы упорядочить по Cost от наивысшего к низшему:

private static void Main(string[] cmdArgs)
{
    AutoPart motorCraftOilFilter = new AutoPart();
    motorCraftOilFilter.Name = "MotorCraft Oil Filter";
    motorCraftOilFilter.Cost = 6.99;

    Liquid valvolineOil = new Liquid();
    valvolineOil.Name = "Valvoline Oil";
    valvolineOil.Cost = 8.99;
    valvolineOil.Quarts = 1;

    Tool wrench = new Tool();
    wrench.Name = "Duralast 13mm Wrench";
    wrench.Cost = 16.99;
    wrench.SizeInMM = 13;

    var catalog = new List<AutoPart>
    {
        motorCraftOilFilter,
        valvolineOil,
        wrench
    };

    // Pretent the command to order products was entered
    // You can use OrderByDescending to order the items by 
    // Cost from Highest to Lowest
    catalog = catalog.OrderByDescending(part => part.Cost).ToList();

    // Output results
    catalog.ForEach(item => Console.WriteLine(item.Name + " " + item.Cost));

    Console.Write("\nPress any key to exit...");
    Console.ReadKey();
}

Следует обратить внимание на то, как вы спроектировали свои классы, - вам не нужно создавать new поля, которые уже определены в базовом классе. Это одна из причин использования наследования в том, что вы наследуете эти поля автоматически.

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

Таким образом, ваши классы намного проще - добавьте только уникальные свойства к дочерним классам:

public class AutoPart
{
    public string Name { get; set; }
    public double Cost { get; set; }
}

public class Liquid : AutoPart
{
    public double Quarts { get; set; }
}

public class Tool : AutoPart
{
    public double SizeInMM { get; set; }
}
0 голосов
/ 14 сентября 2018

Удалите ненужные поля в дочернем классе, потому что они наследуются от AutoPart.

public class Liquid : AutoPart
{
    public string FluidType;  //this defines the type of fluid the product
    public double Quarts;     //this defines the quarts of the object
}

public class tool : AutoPart
{
    public double sizeinmm; //this declares the size of the tool in milimeters
}

Создайте список, содержащий все автозапчасти

List<AutoPart> AllAutoParts = new List<AutoPart>
{
    Motorcraftoilfilter,
    valvolineoil,
    Wrench,
};

Затем вы можете выполнить работу

if (Console.ReadLine() == "Return Price High to low")
{
    foreach (var autopart in AllAutoParts.OrderByDescending(autopart => autopart.Cost))
        Console.WriteLine("Cost: {0}, Name: {1}", autopart.Cost, autopart.Name);
}
...