在另一个项目列表中存储项目和属性列表的最佳方法

时间:2017-02-02 12:43:57

标签: c#

我需要存储用户输入的项目列表。这些项目可以有多个与之关联的分类,这些分类可以有自己的属性。以这种方式存储数据的最佳方法是什么?

仅举一个例子,我将使用汽车。用户输入他们有福特。然后用户指定他们拥有哪些福特汽车(可能是Mustang,Focus等)。然后输入Mustang,Focus或其他任何费用。因此,我们最终会得到一份福特汽车清单,每辆汽车都有自己的成本。

然后用户将输入GM并启动相同类型的另一个列表。 这就是我看到这个列表的方式:

Ford -> Mustang -> $30000
     -> Focus -> $20000
     -> F150 -> $40000

GM -> Camaro -> $30000
   -> Corvette -> $50000

我考虑过使用嵌套数组,但这似乎不是处理这种情况的有效方法,因为看起来我必须深入嵌套3个数组。如果我做了一系列对象,我将不得不为每辆车复制制造商(使用我的例子),我只希望用户看到每个制造商的一个条目。

2 个答案:

答案 0 :(得分:1)

您可能想为对象创建自己的类/结构:

public class Car
{
    public string Brand { get; set; }
    public string Model { get; set; }
    public int Price { get; set; }
}

使用示例:

var carsDict = new Dictionary<string, List<CarDetails>>()
{
   { "Ford", new List<CarDetails>() },
   { "GM", new List<CarDetails>() },
};

var mustang = new CarDetails
{
    Brand = "Ford",
    Model = "Mustang",
    Price = 30000
}

carsDict["Ford"].Add(mustang);
carsDict["Ford"].Add(new CarDetails { Brand="Ford", Model="Focus", Price=20000 });

如果你想让所有福特汽车说出来,你可以直接拿到清单:

var allFords = carDicts["Ford"];

答案 1 :(得分:0)

使用Car模型然后使用CarView模型做一些简单的事情,以提供可以根据需要显示的汽车列表。

    public class Car
    {
        public string Brand { get; set; }
        public string Model { get; set; }
        public decimal Price { get; set; }
    }

    public class CarView
    {
        public List<Car> CarList { get; set; } 
    } 

然后,您可以使用一系列汽车填充CarList并显示您想要的汽车:

        var mustang = new Car
        {
            Brand = "Ford",
            Model = "Mustang",
            Price = 30000.00M
        };

        var focus = new Car
        {
            Brand = "Ford",
            Model = "Focus",
            Price = 20000.00M
        };

        var corvette = new Car
        {
            Brand = "GM",
            Model = "Corvette",
            Price = 50000.00M
        };

        CarView dealerCars = new CarView()
        {
            CarList = new List<Car>()
        };           
        dealerCars.CarList.Add(mustang);
        dealerCars.CarList.Add(focus);
        dealerCars.CarList.Add(corvette);

        var filteredList = dealerCars.CarList.Where(item => item.Brand == "Ford");

        foreach(var car in filteredList)
        {
            Console.WriteLine("Brand: {0}, Model: {1}, Price: ${2}", car.Brand, car.Model, car.Price);                
        }

        Console.ReadLine();

结果:

enter image description here