2011-09-28 56 views
0

我有以下代码。我在网站上做了一些工作,但有时他们会重定向,如果他们这样做,我想在重定向网站上完成工作。但是我不想在做这项工作之前检查所有的重定向网站,因为它们很少。那么如何将它插入循环?我知道我不能插入字符串数组,但是最好的结构是什么?可能因为插入而列出,尽管我不太愿意坚持我们已经处理过的价值观。我不熟练使用C#。在foreach中插入到数组中

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 
    } 
} 
+0

你的代码有什么问题?是否有某种错误? – Marco

+0

你想插入什么?你能不能单独列出并在以后追加它? – V4Vendetta

回答

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 
} 
+0

谢谢! Hashset解决了我的其他问题重复行:)顺便说一句,如果你将所有行转换成uris,并且一行不是一个适当的Uri,我会得到一个异常。但仅限于第一行,如何正确处理所有畸形的网址? – tothphu

+0

你可以使用Uri.IsWellFormedUriString(uriString,UriKind.Absolute),我已经更新了我的答案。 – bitbonk

+0

很酷。谢谢。我怎样才能提取非格式化的网址呢?我想知道他们,所以不要丢失任何数据。 – tothphu

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

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