在 VB.net 中扩展 SyndicationItem

Extending SyndicationItem in VB.net

我需要你的帮助来解决关于继承的问题。 在我的一个项目中,我正在使用 SyndicationFeed .net class 来读取多个提要,使其元素成为 ul。 对于每个元素,我也想显示提要的图像,因此我想将提要的相同 ImageUrl 属性 分配给单个项目。 所以我开始创建一个派生的 class:

Public Class SyndicationItemWImage
 Inherits SyndicationItem
 Private mItemImage As Uri

 Public Property ItemImage As Uri
  Get
   Return mItemImage
  End Get
  Set(value As Uri)
   mItemImage = value
  End Set
  End Property
End Class

然后我会初始化 object 并填充它

Dim BlogsPostsWImage As List(Of SyndicationItemWImage)
BlogsPostsWImage = New List(Of SyndicationItemWImage)
…
[initialize SyndFeed]
…
BlogsPostsWImage.AddRange(SyndFeed.Items.ToList.GetRange(0, 10))

其中 SynFeed 运行良好 SyndicationFeed object。 不幸的是,我收到一个错误消息,指出演员表无效:

System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List1[System.ServiceModel.Syndication.SyndicationItem]' to type 'System.Collections.Generic.IEnumerable1[lucamauricom.SyndicationItemWImage]'. at lucamauricom._default.Page_Load(Object sender, EventArgs e)

我不明白为什么:难道不应该允许从 parent class 转换为 child 吗? 我想我在这里遗漏了一些基本的东西……不确定是什么。

感谢您提供的任何帮助。

不幸的是,似乎没有人能帮我解决这个问题,所以我继续从另一个角度解决这个问题:我现在有了另一种方法来实现同样的目标。我在这里回答我自己的问题来记录它。

从与上面相同的 SynFeed 开始,我填充了一个临时 List 然后我添加了一个 ElementExtension:

Dim TempItems As New List(Of SyndicationItem)

If SyndFeed.Items.Count >= CurrentFeed.TotalElements Then
  TempItems.AddRange(SyndFeed.Items.ToList.GetRange(0, CurrentFeed.TotalElements))
Else
  TempItems.AddRange(SyndFeed.Items.ToList)
 End If

 For Each CurrItem As SyndicationItem In TempItems
   CurrItem.ElementExtensions.Add("favico", "", SingleFeed.Descendants("//bits.wikimedia.org/favicon/wikipedia.ico")
 Next

 FeedItems.AddRange(TempItems)

ElementExtension 称为 favico,它不包含命名空间,但值为 //bits.wikimedia.org/favicon/wikipedia.ico。 这样,我将数据添加为一种 "custom field" 形式,可以像这样在 ASPX 页面上轻松读取:

<img src='<%#CType(Container.DataItem, SyndicationItem).ElementExtensions.ReadElementExtensions(Of String)("favico", "").Item(0).ToString%>' height="16" />

我仍然无法弄清楚我最初想法的派生 class 有什么问题,但是在 Syndication [=32] 的上下文中,第二种处理问题的方法可能更好=].