2011-09-28 58 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循環並減少循環的索引。