【发布时间】:2013-12-04 19:13:36
【问题描述】:
我正在尝试编写一个方法来返回所有特定类型控件的列表:
所以我有类似下面的方法:
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类型。
如何返回特定类型的列表?
【问题讨论】:
-
神秘的反对者?有什么原因吗?
-
不是我,但可能是由于大量嵌套。这被一些人认为是不好的做法,随着代码量的增加几乎不可能维护。
-
@Neolisk,感谢您尝试解释。如果你能弄清楚如何对那个怪物进行 LINQify,我会全力以赴,但我尝试编写一些 linq 查询,但它们似乎不太可读。这个函数的重点是将我需要做的嵌套包装到一个我可以调用的方法中。我真的不认为这是一个糟糕的做法。无论如何,这不是我问题的核心组成部分。
-
LINQ 在可维护性方面很糟糕。我更喜欢简单的旧学校代码,即使您将拥有更多代码。我快速尝试改进代码布局和可读性:pastebin。实际上,即使是this - pastebin #2。
-
很高兴我让您对此感到兴奋。我喜欢在工作和业余时间进行代码优化。做得好! +1。