.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.ObservableCollection1[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
第二个代码行)