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

时间:2014-10-02 19:45:02

标签: c# linq ienumerable yield

我有这个功能:

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 个答案:

答案 0 :(得分:3)

您别无选择,只能使用foreach循环。它是一个经常被请求的功能,但不是语言中的功能。