0

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

我已经确定了带有接口的传入对象:

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))

它抛出异常(德语):

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

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

我的测试:

异常截图

4

2 回答 2

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)())
于 2013-03-14T18:08:08.007 回答
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

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

于 2013-04-23T11:28:56.477 回答