public void Append(Checkpoint cp, bool finish = false) { if (RiderId != cp.RiderId) { throw new ArgumentException($"Found checkpoints with different RiderIds {RiderId} {cp.RiderId}", nameof(cp)); } var newLaps = Laps.Concat(new [] { Laps.LastOrDefault()?.CreateNext(cp) ?? new Lap(cp, Start) }); UpdateFromLaps(RiderId, newLaps, finish); }