protected Evt Find <Evt>(Func <Evt, bool> predicate = null, int precedingTurns = 0) where Evt : EventBase { var events = _generator.GetTurnEvents <Evt>(precedingTurns); if (predicate != null) { events = events.Where(predicate); } return(events.FirstOrDefault()); }