【发布时间】:2016-01-01 11:04:30
【问题描述】:
我写了以下代码:
Public Class FrmMain
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'''''''''BioSystem Section'''''''''
Dim Bio As New BioSystem
Dim LstBioSystem As New List(Of BioSystem)
Bio.Heart = "Some Value"
Bio.liver = "Some Value"
Bio.Lungs = "Some Value"
LstBioSystem.Add(Bio)
'''''Add Second Value to BioSystem list
Bio = New BioSystem
Bio.Heart = "Some Value2"
Bio.liver = "Some Value2"
Bio.Lungs = "Some Value2"
LstBioSystem.Add(Bio)
'''''''''Car Section'''''''''
Dim Car As New CarSystem
Dim LstCars As New List(Of CarSystem)
Car.Acceleration = "Some Value"
Car.Engine = "Some Value"
Car.Speed = "Some Value"
Car.Weight = "Some Value"
LstCars.Add(Car)
'''''Add Second Value to Car list
Car = New CarSystem
Car.Acceleration = "Some Value2"
Car.Engine = "Some Value"
Car.Speed = "Some Value2"
Car.Weight = "Some Value2"
LstCars.Add(Car)
''''Output values
WriteBio(LstBioSystem)
WriteCar(LstCars)
End Sub
Public Sub WriteBio(ByVal BioList As List(Of BioSystem))
For Each Bio As BioSystem In BioList
Console.WriteLine($"Heart:{Bio.Heart}, liver:{Bio.liver}, Lungs:{Bio.Lungs}")
Next
End Sub
Public Sub WriteCar(ByVal CarList As List(Of CarSystem))
For Each Car As CarSystem In CarList
Console.WriteLine($"Acceleration:{Car.Acceleration}, Engine:{Car.Engine}, Speed:{Car.Speed}, Weight:{Car.Weight}")
Next
End Sub
End Class
Public Class BioSystem
Public Property Heart As String
Public Property liver As String
Public Property Lungs As String
End Class
Public Class CarSystem
Public Property Engine As String
Public Property Speed As String
Public Property Acceleration As String
Public Property Weight As String
End Class
我想知道是否有办法简化代码?
做这样的事情:
*Method "WriteStr" 应该替换 "WriteBio" 方法和"WirteCar" 方法。
'using:
WriteStr(LstBioSystem)
WriteStr(LstCars)
''''
Public Sub WriteStr(Of T)(ByVal Lst As List(Of T))
Select Case GetType(T)
Case GetType(BioSystem)
For Each Bio As BioSystem In Lst
Console.WriteLine($"Heart: {Bio.Heart}, liver:{Bio.liver}, Lungs:{Bio.Lungs}")
Next
Case GetType(CarSystem)
For Each Car As CarSystem In Lst
Console.WriteLine($"Acceleration:{Car.Acceleration}, Engine:{Car.Engine}, Speed:{Car.Speed}, Weight:{Car.Weight}")
Next
End Select
End Sub
当然,我有错误;
“'T' 类型的值无法转换为 'BioSystem'”
“'T' 类型的值不能转换为 'CarSystem'”
【问题讨论】:
-
你可以使用
List(Of Object) -
你的 Car 和 Bio 可以覆盖 ToString,那么不管是什么类型
-
如果将其更改为对象,我得到了错误。 Visual Studio 建议在“WriteStr”方法中更改“IEnumerable”,而不是使用列表,它的工作,但我应该了解更多关于“IEnumerable”的信息?我需要使用这种方式。覆盖我的观点..
-
您的
BioSystem和CarSystem类彼此没有共同点。更改为 List(Of Object) 并为它们覆盖 ToString() 将是最简单的解决方案。如果你想强迫他们有共同点,那就开发一个他们都必须实现的Interface,然后改为List(Of YourInterfaceType)。
标签: vb.net list types type-conversion