在foreach中插入到数组中

本文关键字:数组 插入 foreach | 更新日期: 2023-09-27 18:09:58

我有以下代码。我在网站上做一些工作,但有时他们会重定向,如果他们这样做,我想在重定向的网站上做一些工作。但是我不想在做这项工作之前检查所有的重定向网站,因为它们很少。那么我怎么把它插入循环呢?我知道我不能插入字符串数组,但最好的结构是什么?可能是list,因为insert,尽管我不太想保留我们已经处理过的值。我不精通c#。

string[] lines = System.IO.File.ReadAllLines(@"my_file_with_urls.txt");
foreach (string line in lines)
{
  Uri default_uri = new Uri(line);
  Uri response;
  WebSiteIsAvailable(default_uri, out response); 
  //Do work on the actual link
  if (!response.Host.Equals(default_uri.Host)){
    //I want to run the work on the redirected website
  }
}

在foreach中插入到数组中

var urisToProcess = new HashSet<Uri>(
  lines.Where(s => Uri.IsWellFormedUriString(s, UriKind.Absolute)).Select(s => new Uri(s)));
var redirectedUris = new HashSet<Uri>();
foreach (var uri in urisToProcess)
{
  Uri response;    
  WebSiteIsAvailable(uri, out response); 
  if(response.Equals(uri))
  {
    // do work on actual URI
    continue;
  }
  while (!response.Equals(uri))
  {    
    uri = response;
    WebSiteIsAvailable(uri, out response); 
  }
  if(!urisToProcess.Contains(uri))
  {
     redirectedUris.Add(uri);
  }
}
foreach (var uri in redirectedUris)
{
  // do work on redirected URI
}

你可以试试,我还没有完全测试过,但是。

foreach (string line in lines) 
{   
 Uri default_uri = new Uri(line);   
 Uri response;    
 WebSiteIsAvailable(default_uri, out response);     
 while (!response.Host.Equals(default_uri.Host))
 {    
  default_uri = response;
  WebSiteIsAvailable(default_uri, out response); 
 } 
 //Do work on the actual link as now default_uri contains the working link.
} 

不能在foreach中插入数组或列表中的项。而是创建一个for循环,并减少循环的索引。