最後かどうかとるのは面倒くさい扱いなので
foreach にして ValueTuple で渡しがちですね。
using System;
using System.Linq;
var count = 11;
var start = 0;
foreach (var (n, isLast)
in Enumerable.Range(start, count).Select((n,index) => (n, index + 1 >= count)))
{
Console.WriteLine($"n:{n,2}, isLast:{isLast}");
}
n: 0, isLast:False
n: 1, isLast:False
n: 2, isLast:False
n: 3, isLast:False
n: 4, isLast:False
n: 5, isLast:False
n: 6, isLast:False
n: 7, isLast:False
n: 8, isLast:False
n: 9, isLast:False
n:10, isLast:True