我有一个对象列表.我想确定用户何时获取列表中的第一个或最后一个对象,这样我就可以禁用页面上的某些按钮.
例如,我可能有一些布尔值,如果请求的对象是列表中的最后一个或第一个,那么它将返回true,否则false.
任何的想法?
如果您的对象列表确实是a List,那么明确使用它可能会更好(改编为MehmetAtaş的答案):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就消除了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);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它
IEnumerable<User> users = // something
User user = // something
bool isFirstOrLast = users.IsFirstOrLast(user);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10264 次 |
| 最近记录: |