我正在尝试从Dictionary中加载值列表。我可以遍历列表和 获取值,但获取InvalidCastException
Additional information: Unable to cast object of type 'WhereListIterator`1[PumpTubing.Tubing]' to type 'PumpTubing.Tubing'.
尝试使用以下内容时:
Dim tb2 As List(Of Tubing) = pd.pumps.Values.
Select(Function(f) f.
Where(Function(t) t.Tube.Equals("Tube3"))).
Cast(Of Tubing)().ToList()
有办法做到这一点吗?我尝试了几种变体而无法使其发挥作用。
我已经加入了一种加载一些测试数据的方法。
以下是我的代码:
Module Module1
Private pd As New PumpData
Sub Main()
LoadTestData()
' This works and returns a a List with 3 entries
Dim tb1 As New List(Of Tubing)
For Each x As KeyValuePair(Of Pumps, List(Of Tubing)) In pd.pumps
For Each t As Tubing In x.Value
If t.Tube.Equals("Tube3") Then tb1.Add(t)
Next
Next
' The following throws an InvalidCastExcption:
'
' Additional information: Unable to cast object of type
' 'WhereListIterator`1[PumpTubing.Tubing]' to type 'PumpTubing.Tubing'.
Dim tb2 As List(Of Tubing) = pd.pumps.Values.
Select(Function(f) f.
Where(Function(t) t.Tube.Equals("Tube3"))).
Cast(Of Tubing)().ToList()
End Sub
Private Sub LoadTestData()
pd.pumps.Add(New Pumps With {.Model = "Pump1", .MaxFlowRate = 300},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube1", .VPR = 1.1},
New Tubing With {.Tube = "Tube2", .VPR = 1.2}})
pd.pumps.Add(New Pumps With {.Model = "Pump2", .MaxFlowRate = 400},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube3", .VPR = 1.3},
New Tubing With {.Tube = "Tube4", .VPR = 1.4}})
pd.pumps.Add(New Pumps With {.Model = "Pump3", .MaxFlowRate = 500},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube5", .VPR = 1.1},
New Tubing With {.Tube = "Tube6", .VPR = 1.2}})
pd.pumps.Add(New Pumps With {.Model = "Pump4", .MaxFlowRate = 600},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube3", .VPR = 1.33},
New Tubing With {.Tube = "Tube7", .VPR = 1.4}})
pd.pumps.Add(New Pumps With {.Model = "Pump5", .MaxFlowRate = 700},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube1", .VPR = 1.15},
New Tubing With {.Tube = "Tube8", .VPR = 1.2}})
pd.pumps.Add(New Pumps With {.Model = "Pump6", .MaxFlowRate = 800},
New List(Of Tubing) From {New Tubing With {.Tube = "Tube3", .VPR = 1.35},
New Tubing With {.Tube = "Tube9", .VPR = 1.4}})
End Sub
End Module
以下是课程:
Public Class Pumps
Property Model As String
Property MaxFlowRate As Integer
End Class
Public Class Tubing
Property Tube As String
Property VPR As Decimal
End Class
Public Class PumpData
Property pumps As New Dictionary(Of Pumps, List(Of Tubing))
End Class
答案 0 :(得分:0)
我不太擅长VB语法(来自c#),但我想你的意思是使用SelectMany
代替Select
:
Dim tb2 As List(Of Tubing) = pd.pumps.Values.
SelectMany(Function(f) f.
Where(Function(t) t.Tube.Equals("Tube3"))).
Cast(Of Tubing)().ToList()