使用 LINQ 检查记录是列表中最后还是第一个

本文关键字:最后 第一个 列表 检查 记录 使用 LINQ | 更新日期: 2023-09-27 17:57:21

我有一个对象列表。我想确定用户何时将获得列表中的第一个或最后一个对象,这样我就可以禁用页面上的某些按钮。

例如,我可能有一些布尔值,如果请求的对象在列表中排在最后或第一个,那么它将返回true,否则false

知道吗?

使用 LINQ 检查记录是列表中最后还是第一个

如果你的对象列表确实是一个List,最好明确使用它(改编了穆罕默德·阿塔斯的答案):

static class ListExtensions
{
  public static bool IsFirst<T>(this List<T> items, T item)
  {
    if (items.Count == 0)
      return false;
    T first =  items[0];
    return item.Equals(first);
  }
  public static bool IsLast<T>(this List<T> items, T item)
  {
    if (items.Count == 0)
      return false;
    T last =  items[items.Count-1];
    return item.Equals(last);
  }
}

这样就可以消除 LINQ 开销(它不多,但很重要)。但是,您的代码必须使用List<T>才能正常工作。

你可以写一个扩展方法,例如

public static class IEnumerableExtensions
{
    public static bool IsLast<T>(this IEnumerable<T> items, T item)
    {
        var last =  items.LastOrDefault();
        if (last == null)
            return false;
        return item.Equals(last); // OR Object.ReferenceEquals(last, item)
    }
    public static bool IsFirst<T>(this IEnumerable<T> items, T item)
    {
        var first =  items.FirstOrDefault();
        if (first == null)
            return false;
        return item.Equals(first);
    }
    public static bool IsFirstOrLast<T>(this IEnumerable<T> items, T item)
    {
        return items.IsFirst(item) || items.IsLast(item);
    }
 }

你可以像这样使用它

 IEnumerable<User> users = // something
 User user = // something
 bool isFirstOrLast = users.IsFirstOrLast(user);
var yourObject = yourList[0];
if(list.Count > 0)
    if(yourObject == list.First() || yourobject == list.Last())
    {
     //item is either first or last
    }

但请记住检查列表是否至少包含 1 个项目,否则您最终将出现"第一个"、"最后一个"的例外情况。

以上将比较对象的引用,您可以通过实现自定义 IComparable 来比较它们的值,也可以比较它们的值。