Pokud se jedná o IList<T>, kde znáte počet a lze ho efektivně indexovat, použijte jednoduše výraz:
if (item == Items[Items.Count - 1])
Pokud se jedná o obecné IEnumerable<T>, kde počet neznáte a navíc potřebujete, aby byl enumerátor procházen pouze 1x, můžete použít kód jako například:
public class LastEnumerableItem<T>
{
public T Value { get; set; }
public bool IsFirst { get; set; }
public bool IsLast { get; set; }
}
public static class LastEnumerator
{
public static IEnumerable<LastEnumerableItem<T>> GetLastEnumerable<T>(this IEnumerable<T> source)
{
bool isFirst = true;
using (var enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
bool isLast;
do
{
var current = enumerator.Current;
isLast = !enumerator.MoveNext();
yield return new LastEnumerableItem<T>
{
Value = current,
IsFirst = isFirst,
IsLast = isLast
};
isFirst = false;
} while (!isLast);
}
}
}
}
použití pomocné extension metody GetLastEnumerable pak bude:
foreach (var item in items.GetLastEnumerable())
{
if (item.IsLast)
{
//TODO: Use item.Value
}
}
|