其他提示

它可能会更容易,只需使用For循环代替的ForEach。但是,同样的,你可以保留一个计数器的ForEach循环中,看看它等于yourCollection.Count - 1,那么你在最后一次迭代。

与foreach,你不知道这个直到为时太晚(ie。你的循环)。

注意,我假设你正在使用的东西在哪里你只能有一个综合的接口。如果你有一个清单,列,等等。然后按照其他的答案在这里,其用途。数或类似于找出如何许多的项目有,而因此,你可以跟踪你在哪里在收集。

然而,只有综合/IEnumerator,有没有办法知道到底或没有更多,如果使用foreach.

如果你需要知道这一点,使用综合自己,这是什么foreach。

以下解决方案是为C#但应该很容易地转换到VB.NET:

List<Int32> nums = new List<Int32>();
nums.Add(1);
nums.Add(2);
nums.Add(3);

IEnumerator<Int32> enumerator = nums.GetEnumerator();
if (enumerator.MoveNext())
{
    // at least one value available
    while (true)
    {
        // make a copy of it
        Int32 current = enumerator.Current;

        // determine if it was the last value
        // if not, enumerator.Current is now the next value
        if (enumerator.MoveNext())
        {
            Console.Out.WriteLine("not last: " + current);
        }
        else
        {
            Console.Out.WriteLine("last: " + current);
            break;
        }
    }
}
enumerator.Dispose();

这将打印:

not last: 1
not last: 2
last: 3

关键是要采取一个复制的当前价值,然后要求枚举,试图转移到下一个。如果失败,将复制你的确是最后一个数值,否则还有更多。

简短的回答:你不能

龙答:没有什么在的语义为每个允许您确定您是否正在运行的姓氏,名字或任何特定的循环语句。

对于每一个建在了IEnumerable和IEnumerable <>接口和行为取决于你调用执行。它是有效的,但令人困惑,在收集你正在迭代以不同的顺序每次返回的元素。幸运的是,名单<>并没有这样做。

如果你真的需要知道某个特定的迭代是最后一个,你可以找出最后一个元素(提前),然后采取不同的行动,当你遇到元素。

更容易将检测的第一迭代(比方说,通过一个布尔值),然后做不同的东西。

这是实施例(C#,但VB将是相似的):

StringBuilder result = new StringBuilder();
bool firstTime = true;
foreach(string s in names)
{
    if (!firstTime)
    {
        result.Append(", ");
    }

    result.Append(s);
    firstTime = false;
}

检查如果元素是容器的最后一个元素。

你为什么要这么做?点击 你可以只把指令的循环之后。 (你的最后一个元素上执行)

这会更容易地使用for循环,而不是一个foreach,但你可以不喜欢

If item.Equals(itemCollection(itemCollection.Count)) Then
    ...
End If

您ForEach循环的内部...假设对象已经适当重写Equals方法。

这是可能比仅仅使用For循环或跟踪当前指数在一个单独的变量更加资源密集的。

我不知道这是否是正确的语法,它是因为我已经用VB很长一段时间。

使用标准的“对于每一个”循环你不能。的目的是“为每一个”循环,是让你把注意力集中在数据代替底层集合的。

我继续回来到这个职位,所以我决定坐下来思考这个问题,我本想出了:

    For Each obj In myCollection
        Console.WriteLine("current object: {0}", obj.ToString)

        If Object.ReferenceEquals(obj, myCollection.Last()) Then
            Console.WriteLine("current object is the last object")
        End If
    Next

您甚至可以降低If...Then...End If语句单行,如果你想。我不知道,如果在每个迭代上呼吁.Last()对性能有很大的影响,但你总是可以把它分配给了循环的变量外,如果那是什么让你彻夜难眠。

此代码示例可以帮助

For Each item in Collection
  If ReferenceEquals(Collection.Item(Collection.Count - 1), item) Then
    'do something with your last item'
  End If
Next

如果你是绑IEnumerable的。你必须是foreach循环里面?如果没有,你可以只在foreach循环之前声明一个变量。在循环过程中进行设置。然后,用它在循环之后(如果其不为空)

那么有一些解决方法 假设您正在使用的CheckBoxList工作

那么这个代码示例可能有帮助:

Dim count As Integer = 0
Dim totalListCount As Integer = CheckBoxList.Items.Count()
For Each li In CheckBoxList.Items
         count += 1
           // This is the Last Item
      If count = totalListCount THEN
          // DO Somthing.....
      END IF
NEXT     

下面是一个简单的事情,我不知道这是否是政治上正确,但它的工作原理

for each item in listOfThings
   if(item = listOfThings.last)then 
       'you found the last loop
   end if
next 
scroll top