在LINQ中只选择第一个对象?

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;

}

我该怎么办?

1个回答

16
你可以使用.First().FirstOrDefault()扩展方法,它允许你检索符合特定条件的第一个元素:
private Tile CheckCollision(Tile[] tiles)
{
    return tiles.FirstOrDefault(t => t.Rectangle.IntersectsWith(Rectangle));
}
.First() 扩展方法会在数组中找不到满足要求的元素时抛出异常。相反,.FirstOrDefault() 会静默地返回 null。因此,请使用更适合您需求的那个扩展方法。
需要注意的是还有一个可供使用的.Single()扩展方法。与.First()的区别在于,如果有多个元素符合条件,.Single()会抛出异常,而.First()将返回第一个元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接