オブジェクトのリストがあります。ユーザーがリストの最初または最後のオブジェクトをいつ取得するかを判断したいので、ページ上のいくつかのボタンを無効にすることができます。
たとえば、ブール値があり、要求されたオブジェクトがリストの最後または最初にある場合は を返しtrue
、そうでない場合は を返しますfalse
。
何か案が?
オブジェクトのリストが実際に である場合はList
、明示的に使用する方がよい場合があります (Mehmet Ataş の回答に適合):
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 つのアイテムが含まれているかどうかを確認することを忘れないでください。そうしないと、 First、Lastから例外が発生します。
上記はオブジェクトの参照を比較します。カスタムIComparableを実装して値を比較するか、それらの値を比較することができます。