Можно ли вернуть список из блока итератора?
У меня есть эта функция:
class Path : List<LineSegment> { }
private IEnumerable<LineSegment> GetLineSegments(CollisionType collisionType, Path path)
{
if (collisionType == CollisionType.End)
{
yield return path.First();
yield return path.Last();
}
else if (collisionType == CollisionType.Segment)
{
foreach (LineSegment lineSegment in path)
{
yield return lineSegment;
}
}
}
По сути, я проверяю столкновение (между мячом и линией) двумя способами. В одном случае я хочу проверить только конечные точки нарисованного пути, но в другом случае я хочу вернуть каждый отрезок линии на всем пути.
Кажется немного странным циклически перебирать заданный список, чтобы вернуть весь список. Могу ли я просто вернуть список? Я хотел бы иметь возможность сделать что-то вроде этого, но я получаю ошибки:
private IEnumerable<LineSegment> GetLineSegments(CollisionType collisionType, Path path)
{
if (collisionType == CollisionType.End)
{
yield return path.First();
yield return path.Last();
}
else if (collisionType == CollisionType.Segment)
{
return path.AsEnumerable<LineSegment>();
}
}
1 ответ
Решение
У вас нет выбора, кроме как использовать foreach
петля. Это довольно часто запрашиваемая функция, но ее нет в языке.