当前位置:  开发笔记 > 编程语言 > 正文

你如何在For Each(VB.NET)中找到最后一个循环?

如何解决《你如何在ForEach(VB.NET)中找到最后一个循环?》经验,为你挑选了3个好方法。

如何判断我是否处于VB.NET中For Each语句的最后一个循环中?



1> Alex Essilfi..:

通常,您可以执行的集合For Each实现IEnumerator接口.此接口只有两个方法,MoveNextReset和一个属性,Current.

基本上,当您For Each在集合上使用a 时,它会调用该MoveNext函数并读取返回的值.如果返回的值是True,则表示集合中存在有效元素,并且通过Current属性返回元素.如果集合中没有其他元素,则MoveNext函数返回False并退出迭代.

从以上的解释,很明显的是,For Each不跟踪集合中的当前位置,因此在回答你的问题是一个短期.

但是,如果您仍想知道自己是否在集合中的最后一个元素上,则可以尝试以下代码.它检查(使用LINQ)当前项是否是最后一项.

For Each item in Collection
    If item Is Collection.Last Then
        'do something with your last item'
    End If
Next



2> Strelok..:

使用For循环而不是ForEach可能会更容易.但是,类似地,你可以在ForEach循环中保留一个计数器并查看它是否等于yourCollection.Count - 1,然后你就在最后一次迭代中.



3> angry person..:

对于foreach,你不可能知道这一点,直到它为时已晚(即你已经离开了循环).

注意,我假设您正在使用只有IEnumerable接口的东西.如果你有一个列表,数组等,那么请按照这里使用.Count或类似的其他答案来查找有多少项,这样你就可以跟踪你在集合中的位置.

然而,只有IEnumerable/IEnumerator,如果你使用foreach,就没有办法确定是否还有更多.

如果你需要知道这一点,请自己使用IEnumerable,这就是foreach的作用.

以下解决方案适用于C#,但应轻松转换为VB.NET:

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

IEnumerator 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

诀窍是获取当前值的副本,然后要求枚举器尝试继续下一个.如果失败了,你制作的副本确实是最后一个值,否则还有更多.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有