C# 使用LINQ在不更改变量类型的情况下过滤列表
我正在用c写一个网络爬虫。在获取页面上所有链接的方法中,我希望返回链接列表,但使用LINQ对其进行“过滤”,以便列表仅包含存在的URL。我编写了一个名为RemoteFileExists的助手方法,它返回一个布尔值。在方法的末尾,我编写了以下LINQ行:C# 使用LINQ在不更改变量类型的情况下过滤列表,c#,linq,list,C#,Linq,List,我正在用c写一个网络爬虫。在获取页面上所有链接的方法中,我希望返回链接列表,但使用LINQ对其进行“过滤”,以便列表仅包含存在的URL。我编写了一个名为RemoteFileExists的助手方法,它返回一个布尔值。在方法的末尾,我编写了以下LINQ行: //Links is a List<string> that hasn't been filtered return (from link in Links where RemoteFileExists
//Links is a List<string> that hasn't been filtered
return (from link in Links
where RemoteFileExists(link)
select link).ToList<string>();
我猜要么你的链接不正确,要么你的网站不支持HEAD。因为这个代码有效
List<string> Links = new List<string>() {"http://www.google.com"};
var res = ( from link in Links
where RemoteFileExists(link)
select link).ToList<string>();
我猜要么你的链接不正确,要么你的网站不支持HEAD。因为这个代码有效
List<string> Links = new List<string>() {"http://www.google.com"};
var res = ( from link in Links
where RemoteFileExists(link)
select link).ToList<string>();
我一直在代码中使用RemoteFileExists方法。有时程序挂起是因为请求未关闭。现在我正在使用以下代码:
static bool RemoteFileExists(string url)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
response.Close();
return (response.StatusCode == HttpStatusCode.OK);
}
catch
{
return false;
}
}
此外,上述代码不会检测重定向。这对爬虫程序很重要,因为您需要知道何时前进到另一个页面,而不是按照重定向到同一页面。我一直在代码中使用RemoteFileExists方法。有时程序挂起是因为请求未关闭。现在我正在使用以下代码:
static bool RemoteFileExists(string url)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
response.Close();
return (response.StatusCode == HttpStatusCode.OK);
}
catch
{
return false;
}
}
此外,上述代码不会检测重定向。这对爬虫程序很重要,因为您需要知道何时前进到另一页,而不是按照重定向到同一页的方式前进。RemoteFileExists是什么样子的?如果您更改该语句并使用foreach循环,您是否在链接中获取了任何数据。。?调试此代码时会发生什么。。?请显示您正在处理的问题的所有相关代码方法experiencing@Oded编辑到OP中。您是否使用调试器查看您得到的异常?在catch中设置断点。@JesusSqueegee您是否尝试进入调试器查看RemoteFileExists是否正确执行并返回OK而未引发异常?RemoteFileExists是什么样子的?如果要更改该语句并使用foreach循环,您是否在链接中获取任何数据。。?调试此代码时会发生什么。。?请显示您正在处理的问题的所有相关代码方法experiencing@Oded编辑到OP中。您是否使用调试器查看您得到的异常?在catch中设置一个断点。@JesusSqueegee您是否尝试单步进入调试器以查看RemoteFileExists是否正确执行并返回OK而不是引发异常?