1

我需要你的帮助来解决关于继承的问题。在我的一个项目中,我正在使用SyndicationFeed .net 类来读取几个提要并生成其元素的ul。对于每个元素,我也想显示提要的图像,因此我想将提要的相同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.Collections.Generic.List 1[System.ServiceModel.Syndication.SyndicationItem]' to type 'System.Collections.Generic.IEnumerable1 [lucamauricom.SyndicationItemWImage]”的对象。在 lucamauricom._default.Page_Load(对象发送者,EventArgs e)

我不明白为什么:不应该允许从父类到子类的强制转换吗?我想我在这里遗漏了一些基本的东西……不知道是什么。

感谢您的任何帮助,您可以提供。

4

1 回答 1

0

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

从与上面相同的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。这样,我将数据添加为一种“自定义字段”,可以在 ASPX 页面上轻松读取,如下所示:

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

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

于 2015-02-14T22:12:17.127 回答