Cast ObservableCollection(未知)

时间:2013-03-14 17:07:19

标签: .net collections casting ienumerable

有一个集合对象。我需要捕获此集合的每个单个对象以使用该单个对象。

我已经通过接口确定了接收对象:

TypeOf Src Is System.Collections.IList = TRUE 
TypeOf Src Is System.Collections.Generic.IEnumerable(Of Object) = TRUE

真实的对象是

System.Collections.ObjectModel.ObservableCollection(Of OwnSpecialClass)

投射此投射对象时

NewCollection = CType(MySourceCollection, System.Collections.ObjectModel.Collection(Of Object))

它抛出异常(GERMAN):

  

Das Objekt des Typs   “System.Collections.ObjectModel.ObservableCollection 1[OwnSpecialClass]" kann nicht in Typ "System.Collections.ObjectModel.Collection 1 [System.Object的]”   umgewandelt werden。

如果OwnSpecialClass不可用且仅称为对象,如何将此集合强制转换为任何ObservableCollection。

我的测试:

Exception screenshot

2 个答案:

答案 0 :(得分:0)

我不完全确定这是否是你所要求的,所以如果不是我道歉但是这里是你如何从一个更具体的可观察集合变为常规集合,反之亦然。这是一个有点昂贵的操作。

Dim observableCollection As New System.Collections.ObjectModel.ObservableCollection(Of String)()
Dim collection As New System.Collections.ObjectModel.Collection(Of Object)(observableCollection.Cast(Of Object)().ToList())

'or in reverse...'

Dim collection As New System.Collections.ObjectModel.Collection(Of Object)()
Dim observableCollection As New System.Collections.ObjectModel.ObservableCollection(Of String)(collection.Cast(Of String)())

答案 1 :(得分:0)

使用以下代码完成工作

 If TypeOf Src Is System.Collections.IList Then

     Dim IListTmp As System.Collections.IList = CType(Src, System.Collections.IList)
     Dim IListTmpItems(IListTmp.Count - 1) As Object
     IListTmp.CopyTo(IListTmpItems, 0)

     For Each O As Object In IListTmpItems
          'Whatever you want to do with that object now.... ex: result = result & O.ToString() & "|"
     Next
 End If

但是转换器的性能并不是很高,因为每个项目都需要进行转换。