C # List.Add устанавливает свойство строки в объекте к тому же значению для каждого элемента списка - PullRequest
0 голосов
/ 29 октября 2018

Извинения, если это довольно простой вопрос или я не использую лучшие методы в своем коде C #, так как я довольно новичок в MVC и C #.

Я использую шаблон хранилища для вывода списка транспортных средств из таблицы в index.html. В таблице транспортных средств есть поле с именем Тип одного символа, которое является внешним ключом таблицы транспортных средств, в котором содержится описание типа.

У меня есть модель представления автомобиля и описание типа.

public class VehicleViewModel
{
    public Vehicle Vehicle { get; set; }
    public string TypeDescription { get; set; }
}

В VehicleController для обработки индексной страницы по умолчанию я получаю список всех транспортных средств в таблице и использую цикл foreach для обхода транспортных средств, формирующих список VehicleViewModel. Я ищу тип для каждого транспортного средства и добавляю TypeDescription на ходу. Проблема в том, что каждый элемент в моем списке всегда обновляется до последнего описания, и я не могу понять, почему?

public async Task<IActionResult> Index()
{
    IEnumerable<Vehicle> vehicles;
    vehicles = await _vehicleRepository.ListVehiclesAsync();

    List<VehicleViewModel> vehiclesView = new List<VehicleViewModel>();
    VehicleViewModel vehicleView = new VehicleViewModel();

    foreach (Vehicle vehicle in vehicles)
    {
        vehicleView.Vehicle = vehicle;
        vehicleView.TypeDescription = await _vehicleTypeRepository.GetDescription(vehicle.Type);

        vehiclesView.Add(vehicleView);
    }
    return View("~/Views/System/Vehicle/Index.cshtml", vehiclesView);
}

Например, у меня есть три типа транспортных средств: «Ван» (V), «Автомобиль» (С), «Лимузин» (L). Когда я делаю шаг по коду, возвращается правильное описание и присваивается vehicleType.TypeDescription. При добавлении транспортного средства в Список транспортных средств все описания типов устанавливаются на одно и то же значение. Почему?

Финальный список:

VehicleView[0].Vehicle.VehicleReg = 'VAN 123'
VehicleView[0].Vehicle.Type = 'V'
VehicleView[0].Vehicle.Make = 'Ford'
VehicleView[0].Vehicle.Model = 'Transit'
VehicleView[0].TypeDescription = 'Limo' (should be 'Van' but overwritten to latest value in Add)

VehicleView[1].Vehicle.VehicleReg = 'CAR 456'
VehicleView[1].Vehicle.Type = 'C'
VehicleView[1].Vehicle.Make = 'Ford'
VehicleView[1].Vehicle.Model = 'Focus'
VehicleView[1].TypeDescription = 'Limo' (should be 'Car' but overwritten to latest value in Add)

VehicleView[2].Vehicle.VehicleReg = 'LIM 789'
VehicleView[2].Vehicle.Type = 'L'
VehicleView[2].Vehicle.Make = 'Ford'
VehicleView[2].Vehicle.Model = 'Stretch'
VehicleView[2].TypeDescription = 'Limo' (correct because it's the last record)

Любая помощь очень ценится.

...