C# 使用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

我正在用c写一个网络爬虫。在获取页面上所有链接的方法中,我希望返回链接列表,但使用LINQ对其进行“过滤”,以便列表仅包含存在的URL。我编写了一个名为RemoteFileExists的助手方法,它返回一个布尔值。在方法的末尾,我编写了以下LINQ行:

//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而不是引发异常?