internal Tuple<Player, Vector> intersect(LineSegment ls1, IEnumerable<Tuple<Player, IEnumerable<LineSegment>>> tanks) { return (from tank in tanks from ls2 in tank.Item2 let intersection = ls1.Intersection(ls2) where intersection != null select new Tuple<Player, Vector>(tank.Item1, (Vector)intersection) ).FirstOrDefault(); }