如果您正在使用一个暴露了
Count
属性的集合 - 这是许多其他答案所假设的,所以我也会这么做 - 那么您可以使用C#和LINQ来实现以下操作:
foreach (var item in list.Select((x, i) => new { Val = x, Pos = i }))
{
Console.Write(item.Pos == (list.Count - 1) ? "Last one: " : "Looping: ");
Console.WriteLine(item.Val);
}
如果我们还假设集合中的项目可以通过索引直接访问 - 目前接受的答案是这样假设的 - 那么普通的for
循环会比foreach
更加优雅/易读:
for (int i = 0; i < list.Count; i++)
{
Console.Write(i == (list.Count - 1) ? "Last one: " : "Looping: ");
Console.WriteLine(list[i]);
}
如果集合没有公开
Count
属性并且无法通过索引访问,则在C#中没有真正优雅的方法来完成此操作。修复了错误的
Thomas Levesque答案可能是你能够得到的最接近的方法。
这里是
Thomas答案的修复版本:
string previous = null;
bool isFirst = true;
foreach (var item in list)
{
if (!isFirst)
{
Console.WriteLine("Looping: " + previous);
}
previous = item;
isFirst = false;
}
if (!isFirst)
{
Console.WriteLine("Last one: " + previous);
}
如果集合没有暴露 Count
属性,且项不能直接通过索引访问,则可以按以下方式使用 C# 进行操作。(请注意,此代码中没有 foreach
,且代码不是特别简洁,但它将为几乎任何可枚举的集合提供良好的性能。)
var e = list.GetEnumerator();
if (e.MoveNext())
{
var item = e.Current;
while (e.MoveNext())
{
Console.WriteLine("Looping: " + item);
item = e.Current;
}
Console.WriteLine("Last one: " + item);
}