0

我正在使用 HTML Agility 来获取所有图像,因为图像并不总是具有我想要遵循的绝对路径。但是代码中下面标记的行会产生错误

无法将类型“System.Uri”隐式转换为“System.Collections.Generic.List”

我不知道如何解决这个问题我尝试了很多选项,但不断出现一个或另一个错误

List<String> imgList = (from x in doc.DocumentNode.Descendants("img")
                      where x.Attributes["src"] != null
                      select x.Attributes["src"].Value.ToLower()).ToList<String>();

List<String> AbsoluteImageUrl = new List<String>();

foreach (String element in imgList)
{
    AbsoluteImageUrl = new Uri(baseUrl, element); //GIVES ERROR
}
4

3 回答 3

2

编译器会产生错误,因为 的类型AbsoluteImageUrl与您的Uri. 如果您需要将 添加Uri到字符串列表,您应该获取其基础字符串(例如Uri.AbsolutePath)。在这种情况下,代码如下所示:

AbsoluteImageUrl.Add(new Uri(baseUrl, element).AbsolutePath);

另一方面,如果您需要一个Uri列表,请保留您的原始代码并更改类型AbsoluteImageUrl

List<Uri> AbsoluteImageUrl = new List<Uri>();

完成此操作后,您应该AbsoluteImageUrl.Add在循环中使用将其添加Uri到列表中。


关于评论中关于Uri.ToString()和之间差异的讨论,Uri.AbsolutePath根据官方 MSDN,它们有不同的定义,因此这取决于他/她应该使用的 OP 的要求。附带说明的源代码Uri.ToString如下,因此它与 有根本不同AbsolutePath

[SecurityPermission(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)]
public override string ToString()
{
    if (this.m_Syntax == null)
    {
        if (this.m_iriParsing && this.InFact(Flags.HasUnicode))
        {
            return this.m_String;
        }
        return this.OriginalString;
    }
    this.EnsureUriInfo();
    if (this.m_Info.String == null)
    {
        if (this.Syntax.IsSimple)
        {
            this.m_Info.String = this.GetComponentsHelper(UriComponents.AbsoluteUri, (UriFormat) 0x7fff);
        }
        else
        {
            this.m_Info.String = this.GetParts(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped);
        }
    }
    return this.m_Info.String;
}
于 2012-11-01T11:43:30.443 回答
1

你可能想要

AbsoluteImageUrl.Add(new Uri(baseUrl, element).ToString());
于 2012-11-01T11:42:33.207 回答
0
List<Uri> AbsoluteImageUrl = new List<Uri>();

foreach (String element in imgList)
{
    AbsoluteImageUrl.Add(new Uri(baseUrl, element));
}
于 2012-11-01T11:46:53.067 回答