.net 铸造可观察收集(未知)

.net 铸造可观察收集(未知),.net,collections,casting,ienumerable,.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) 当投射此输入对

有一个集合对象。我需要捕获此集合中的每个对象才能使用该对象

我已确定接口的输入对象:

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))
它抛出异常(德语):

这是典型的 “System.Collections.ObjectModel.ObservableCollection
1[OwnSpecialClass]”
坎尼希特
“System.Collections.ObjectModel.Collection
1[System.Object]” 乌姆格温德尔·沃登

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

我的测试:


我不完全确定这是否是您所要求的,因此,如果不是,我很抱歉,但以下是您如何从更具体的可观察集合更改为常规集合,反之亦然。这是一个有点昂贵的手术

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

使用以下代码可以完成此工作

 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

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

observedcollection
在您的示例中(第一个代码行)仅作为
对象进行传输,现在的问题是,如何将其浇铸到
observedcollection
(在您的示例中命名为
collection
第二个代码行)