我有以下代码。我正在网站上做一些工作,但有时他们会重定向,如果他们这样做,我想在重定向的网站上进行工作。但是我不想在完成工作之前检查所有站点的重定向,因为它们很少。那么如何将它插入循环中呢?我知道我不能插入字符串数组,但最好的结构是什么?可能列出,因为插入,虽然我不太热衷于坚持我们已经处理过的值。我不熟练使用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
}
}
答案 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循环并减少循环的索引。