我试图编写一个方法来返回所有特定类型控件的列表:
所以我有类似下面的方法:
Private Function GetAllChildControls(Of T)(ByVal grid As DataGridItemCollection)
As List(Of T)
Dim childControls As New List(Of T)
For Each item As DataGridItem In grid
For Each tableCell As TableCell In item.Cells
If tableCell.HasControls Then
For Each tableCellControl As Control In tableCell.Controls
If tableCellControl.GetType Is GetType(T) Then
childControls.Add(DirectCast(tableCellControl, T))
End If
Next
End If
Next
Next
Return childControls
End Function
但是在以下代码中失败了:
childControls.Add(DirectCast(tableCellControl, T))
我收到消息:
无法将
System.Web.UI.Control
类型的表达式转换为T
类型。
如何返回特定类型的列表?
答案 0 :(得分:1)
泛型可以是 任何 ,因此编译器无法知道您只打算在继承自System.Web.UI.Control
的类型上调用此方法。实际上,您可以使用类型Integer
调用该函数,在这种情况下,转换将失败。
您需要做的是说服编译器您只能使用Generic Constraints传递某些类型。然后,您只能允许适用的类型调用该方法。
您需要做的就是修改您的签名:
Private Function GetAllChildControlsInDataGrid(Of T As Control)(
ByVal grid As DataGridItemCollection) As List(Of T)