在foreach中插入数组

时间:2011-09-28 07:09:31

标签: c# arrays redirect 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
  }
}

3 个答案:

答案 0 :(得分:1)

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
}

答案 1 :(得分:0)

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

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.
} 

答案 2 :(得分:0)

您无法在使用foreach进行的数组或列表中插入项目。而是创建一个for循环并减少循环的索引。