是否可以从迭代器块返回列表

本文关键字:返回 列表 迭代器 是否 | 更新日期: 2023-09-27 18:25:20

我有这个函数:

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>();
    }
}

是否可以从迭代器块返回列表

您别无选择,只能使用foreach循环。这是一个经常被要求的功能,但语言中没有。