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

如何在消费时将项目添加到集合中?

如何解决《如何在消费时将项目添加到集合中?》经验,为你挑选了1个好方法。

下面的示例抛出InvalidOperationException,"Collection已被修改;枚举操作可能无法执行".执行代码时.

var urls = new List();
urls.Add("http://www.google.com");

foreach (string url in urls)
{
    // Get all links from the url
    List newUrls = GetLinks(url);

    urls.AddRange(newUrls); // <-- This is really the problematic row, adding values to the collection I'm looping
}

我怎样才能以更好的方式重写这个?我猜一个递归的解决方案?



1> Jon Skeet..:

基本上你不能.你真正想要的是一个队列:

var urls = new Queue();
urls.Enqueue("http://www.google.com");

while(urls.Count != 0)
{
    String url = url.Dequeue();
    // Get all links from the url
    List newUrls = GetLinks(url);
    foreach (string newUrl in newUrls)
    {
        queue.Enqueue(newUrl);
    }
}

由于没有AddRange方法,它有点难看,Queue但我认为它基本上是你想要的.

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