5

基本上我想将此代码改编为 LINQ:

private Tile CheckCollision(Tile[] tiles)
{
    foreach (var tile in tiles)
    {
        if (tile.Rectangle.IntersectsWith(Rectangle))
        {
            return tile;
        }
    }

    return null;
}

代码检查每个图块并返回与对象碰撞的第一个图块。我只想要第一个图块,而不是像我使用这个得到的图块数组:

private Tile CheckCollision(Tile[] tiles)
{
    var rtn = 
        from tile in tiles
        where tile.Rectangle.IntersectsWith(Rectangle)
        select tile;

}

我该怎么办?

4

1 回答 1

16

您可以使用.First()or.FirstOrDefault()扩展方法来检索匹配某个条件的第一个元素:

private Tile CheckCollision(Tile[] tiles)
{
    return tiles.FirstOrDefault(t => t.Rectangle.IntersectsWith(Rectangle));
}

如果在数组中找不到与所需条件匹配的.First()元素,则扩展方法将引发异常。.FirstOrDefault()另一方面,将默默地返回 null 。因此,请使用更适合您需求的那个。

请注意,.Single()您还可以使用扩展方法。不同之.First()处在于,.Single()如果多个元素与条件匹配,则会抛出异常,而.First()将返回第一个。

于 2012-08-05T16:04:17.990 回答