Я сделал ваш FlightInfo
класс и переименовал некоторые свойства в соответствии со стилями кода C #.Также я добавил конструктор, который принимает данные.
class FlightInfo
{
public FlightInfo(string flightNumber, string origination, ...)
{
FlightNumber = flightNumber;
Origination = origination;
// ...
}
public string FlightNumber { get; set; }
public string Origination { get; set; }
public string Destination { get; set; }
public string TakeoffTime { get; set; }
public string LandingTime { get; set; }
public int UserCount { get; set; }
}
Мы добавляем класс FlightManager, который заботится о
- , предотвращая любые проблемы многопоточности с помощью оператора блокировки
- объединение записей
FlightManager
class FlightManager
{
private object _lock = new object();
private List<FlightInfo> _flights = new List<FlightInfo>();
public void Add(FlightInfo info)
{
lock(_lock)
{
// look for existing flights
var existing = _flights.FirstOrDefault(f =>
{
return f.FlightNumber == info.FlightNumber
&& f.TakeoffTime == info.TakeoffTime;
});
// FirstOrDefault will return null if none found
if(existing == null)
{
// add as new flight
_flights.Add(info);
}
else
{
// add passenger count
existing.UserCount += info.UserCount;
}
}
}
}
Использование
static FlightManager Manager = new FlightManager();
allFlights.Add(new FlightInfo(FlightNumber, Origination, Destination, TakeoffTime, LandingTime, UserCount);
POCO (объекты данных)
Существует альтернативный синтаксис дляинициализируйте ваш FlightInfo
, если вы отбросите конструктор.
var flightInfo = new FlightInfo()
{
Origination = origination,
Destination = destination,
// ...
}
, но конструктор прояснит ваше намерение, что пользователь должен предоставить все данные заранее.Если вы используете библиотеку сериализации, это может оказаться невозможным.