我需要你的帮助来解决有关继承的问题。 在我的一个项目中,我使用 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)
我不明白为什么:不应该允许从父类到儿童的演员表? 我想我在这里缺少一些基本的东西......不确定是什么。
感谢您提供的任何帮助。
答案 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
类的上下文中,处理该问题的第二种方法可能更好。