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

App*_*ker 5 c# linq c#-4.0

基本上我想为LINQ调整这段代码:

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

    return null;
}
Run Code Online (Sandbox Code Playgroud)

代码检查每个图块并返回与对象发生碰撞的第一个图块.我只想要第一个瓷砖,而不是像我使用的那样我会得到的瓷砖数组:

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

}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Dar*_*rov 16

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

private Tile CheckCollision(Tile[] tiles)
{
    return tiles.FirstOrDefault(t => t.Rectangle.IntersectsWith(Rectangle));
}
Run Code Online (Sandbox Code Playgroud)

.First(),如果没有元件相匹配的要求条件的阵列中发现的扩展方法将抛出异常.在.FirstOrDefault()另一方面会悄悄返回null.因此,请使用最适合您需求的产品.

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