Итак, в основном то, что я пытаюсь сделать, это создать систему парковочных талонов. У меня есть два класса, один из которых содержит информацию для автомобиля, а другой для билета. Я хочу, чтобы система показывала все билеты, полученные при регистрации автомобиля.
public class Car
{
public string registrationNumber { get; set; }
public string carBrand { get; set; }
public string carColor { get; set; }
public List<Ticket> ticketlist {get; set;}
public void AddParkingTicket(Ticket newTicket)
{
ticketList.Add(newTicket);
}
}
}
public class Ticket
{
public Ticket(int TicketID, DateTime date, string comment, int parkeringareaID, int parkingOfficerID)
{
}
public int TicketID { get; set; } = 0;
public DateTime date { get; set; }
public string commenter { get; set; }
public int parkingsAreaID { get; set; }
public int parkingsOfficerID { get; set; }
}
}
List<Car> list = new List<Car>();
public TicketController()
{
Ticket ticket1 = new Ticket(1, DateTime.Now, "handicap parking", 1, 2);
Car car1 = new Car { registrationNumber = "BT66358", carBrand = "BMW", carColor = "Gul" };
car1.AddParkingTicket(ticket1)
list.Add(car1);
}
мой текущий вывод это
[
{
"registrationNumber": "BT66358",
"carBrand": "BMW",
"carColor: "Yellow",
"ticketlist": null
}
]
Я не уверен, что я делаю неправильно, я пытался изменить конструкторы классов, но безуспешно. Я хочу, чтобы на выходе также отображалась информация о билете для данного регистрационного номера.
@Jacob О, извините за опечатку, когда я писал. это должен быть ticketList, но это не проблема
Я думаю, что в вашем коде чего-то не хватает. Я бы подумал, что строка car1.AddParkingTicket(ticket1)
вызовет ошибку, поскольку car1.ticketList
равна нулю. Вы пропустили свой конструктор, где вы инициализируете ticketList
?
@Jacob Я только что проверил с почтальоном, и код не выполняется, получая эту ошибку «System.NullReferenceException: «Ссылка на объект не установлена на экземпляр объекта». WebApplication.Models.Car.ticketList.get вернул null ''
Хорошо, это имеет больше смысла, чем вывод, который вы изначально опубликовали. Вам просто нужно инициализировать свойство списка в вашем конструкторе.
@Jacob Спасибо, теперь я приближаюсь. вывод: [ { "registrationNumber": "Bt66358", "carBrand": "BMW", "carColor": "Gul", "ticketList": [ { "ticketID": 0, "date": "0001-01- 01T00:00:00", "comment": null, "parkingAreaID": 0, "parkingOfficerID": 0 } ] } ] Не знаю, почему он пустой, когда я создал тикет
Конструктор для Ticket
не присваивает ни один из аргументов конструктора свойствам объекта Ticket
.
@John Да, это там, но значения неверны, как вы можете видеть. Я добавил комментарий, но он показывает "null"
Он говорит, что ваш конструктор ничего не делает для Ticket
. Если вы хотите, чтобы свойства были установлены из параметров вашего конструктора, вы должны написать этот код назначения. Поскольку ваш конструктор ничего не делает, все будет иметь значения по умолчанию.
@ Джейкоб О да, я понял это. теперь вывод показывает информацию о билете, но показывает только последний билет. Поэтому, если этот регистрационный номер имеет 3 билета, он показывает только последний. Какие-нибудь советы?
Я рекомендую опубликовать новый вопрос об этом с минимальным воспроизводимым примером, поскольку это, похоже, выходит за рамки этого вопроса. Если он показывает один и тот же билет 3 раза, возможно, вы повторно используете объект билета, а не создаете новый, или, может быть, вы помещаете код для инициализации списка в AddParkingTicket
, а не в Car
(см. ответ Ноника).
О, уже поздно, и мой мозг не там, где должен быть, ха-ха. Спасибо всем за помощь
вам нужно присвоить значения, передаваемые в билете, в вашем контроллере билетов, например: public Ticket(int TicketID, DateTime date, string comment, int parkeringareaID, intparkingOfficerID) { this.TicketID=TicketID; }
изменить тикетлист на тикетлист
public void AddParkingTicket(Ticket newTicket)
{
ticketlist.Add(newTicket);
}
вам также нужно добавить конструктор в Car для инициализации коллекции, иначе вы получите ошибку
public Car()
{
this.ticketlist = new List<Ticket>();
}
Является ли ваш код
Car
точным? Я вижу, вы делаетеticketList.Add
, но свойство называетсяticketlist
.