这里有一个简单的解决方案,使用基本继承,甚至不使用泛型。我们的想法是,对于所有单元格,都有一个单独的父类。每个列类型都有不同的单元类。这样可以声明行对象中的单元格列表。由于一行中可能有不同的单元格类型,因此不能将它(单元格列表)声明为某些特定单元格类型的列表。但在这种情况下,您可以使用单元格的父类。简而言之,以下是示例:
Public Class Cell
End Class
Public Class Cell_Id
Inherits Cell
Public Value As Integer
End Class
Public Class Cell_Name
Inherits Cell
Public Value As String
End Class
Public Class Cell_MonthlyTax
Inherits Cell
Public Value As Double
End Class
Public Class Row
Public Cells As New List(Of Cell)
Public Sub AddCell(ByVal cell As Cell)
Cells.Add(cell)
End Sub
End Class
Module Module1
Sub Main()
Dim row1 As New Row()
row1.AddCell(New Cell_Id() With {.Value = 1})
row1.AddCell(New Cell_Name() With {.Value = "Name1"})
row1.AddCell(New Cell_MonthlyTax() With {.Value = 12.2})
Dim row2 As New Row()
row2.AddCell(New Cell_Id() With {.Value = 2})
row2.AddCell(New Cell_Name() With {.Value = "Name2"})
row2.AddCell(New Cell_MonthlyTax() With {.Value = 47.9})
Dim row3 As New Row()
row3.AddCell(New Cell_Id() With {.Value = 3})
row3.AddCell(New Cell_Name() With {.Value = "Name3"})
row3.AddCell(New Cell_MonthlyTax() With {.Value = 73.3})
Dim rows As New List(Of Row)(New Row() {row1, row2, row3})
' here you loop through rows, in each row select Cell at index 2, cast it down to a specific
' type (yes, you should tell to a compiler that you sure that Cell at index 2 is of Cell_MonthlyTax type)
' After casting you will get intellisence and see that Value is of Double type.
' In cellsOfColumn2 you will get an array of Double (this is not exactly array, but it doesn't matter in our case)
Dim cellsOfColumn2 = From row In rows Select DirectCast(row.Cells(2), Cell_MonthlyTax).Value
' here you may work with array of values as you want, say calculate avarange value
Dim result = cellsOfColumn2.Average()
End Sub
End Module