仅选择LINQ中的第一个对象

本文关键字:一个对象 选择 LINQ | 更新日期: 2024-10-20 20:13:42

基本上,我想将此代码用于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;
}

我该怎么办?

仅选择LINQ中的第一个对象

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

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

如果在数组中找不到符合所需条件的元素,.First()扩展方法将引发异常。另一方面,.FirstOrDefault()将静默地返回null。所以使用更适合你需求的。

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