【问题标题】:Select only first object in LINQ?只选择 LINQ 中的第一个对象?
【发布时间】:2012-08-05 16:01:53
【问题描述】:

基本上我想为 LINQ 改编这段代码:

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

    return null;
}

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

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

}

我该怎么办?

【问题讨论】:

    标签: c# linq c#-4.0


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多