在VB.net中扩展SyndicationItem

时间:2015-02-01 12:51:07

标签: asp.net vb.net inheritance syndicationfeed

我需要你的帮助来解决有关继承的问题。 在我的一个项目中,我使用 SyndicationFeed .net类来读取几个feed来创建其元素的 ul 。 对于我想要显示Feed图像的每个元素,我希望将Feed的相同 ImageUrl 属性分配给单个项目。 所以我开始创建一个派生类:

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

然后我会初始化对象并填充它

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

其中 SynFeed 是一个运行良好的 SyndicationFeed 对象。 不幸的是,我收到一个错误,演员表无效:

  

System.InvalidCastException:无法转换类型&System; System.Collections.Generic.List 1[System.ServiceModel.Syndication.SyndicationItem]' to type 'System.Collections.Generic.IEnumerable 1 [lucamauricom.SyndicationItemWImage]'的对象。 at lucamauricom._default.Page_Load(Object sender,EventArgs e)

我不明白为什么:不应该允许从父类到儿童的演员表? 我想我在这里缺少一些基本的东西......不确定是什么。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

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

从上面的相同 SynFeed 开始,我填写了一个临时的列表,然后我添加了一个 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。 这样,我将数据添加为一种"自定义字段"可以在ASPX页面上轻松阅读,如下所示:

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

我仍然无法弄清楚我的原始想法的派生类有什么问题,但在Syndication类的上下文中,处理该问题的第二种方法可能更好。