我正在使用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
}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
你可能想要
AbsoluteImageUrl.Add(new Uri(baseUrl, element).ToString());
答案 2 :(得分:0)
List<Uri> AbsoluteImageUrl = new List<Uri>();
foreach (String element in imgList)
{
AbsoluteImageUrl.Add(new Uri(baseUrl, element));
}