0
我正在使用的应用程序具有一个名为RSChild的通用父窗体,用于执行一些操作,具体取决于它所包含的控件是否在MdiTabManager中或内部它自己的模态形式。然后,实际的用户控件包含在从被调用的对象编辑(我们允许编辑的对象)接口继承。在我的代码中,我正在这样做。VB .NET DirectCast和类型反射
Public Function doesTabExist(ByVal id As Integer, ByVal recordType As Enums.eRecordType) As Boolean
Dim alikePages As Object = (From tabs In DirectCast(Control.FromHandle(MainForm.SharedHandle), MainForm).XtraTabbedMdiManager1.Pages Where DirectCast(tabs.MdiChild, RSChild).RSObject.RecordType = recordType Select tabs)
For Each page As DevExpress.XtraTabbedMdi.XtraMdiTabPage In alikePages
Select Case recordType
Case Enums.eRecordType.Doctor
If id = DirectCast(castTabPageToRSChild(page).RSObject, UI.Doctor).ID Then
pageToActive(page)
Return True
End If
'rest of the cases so the case block is repeated 10 times'
End Function
而且我castTabPageToRSChild(页)是一个lambda功能这样的
Dim castTabPageToRSChild As Func(Of DevExpress.XtraTabbedMdi.XtraMdiTabPage, RSChild) = Function(page) DirectCast(page.MdiChild, RSChild)
所以我的问题是,我有大约10 case语句,都是因为我似乎无法找到一种方法来使用反射来获取RSObject对象的底层类型。所以我有整个If块重复一遍又一遍。我试过castTabPageToRSChild(page)RSObject.GetType
并在DirectCast
中使用它,我也尝试创建另一个与之分开的对象,并做同样的事情。
我的代码按预期工作我只是想看看是否有一种我没有很多复制代码的方式。我的目标是做类似
For Each page As XtraMdiTabPage In alikePages
If id = DirectCast(castTabPageToRSchild(page).RSObject, castTabPageToRSChild(page).RSObject.GetType).Id Then Return True
Next
但是我有一种感觉,这是不可能的,因为的DirectCast
行为。
这完全不是问题。我需要能够将类型投射到。 – msarchet 2010-04-27 20:37:49
对不起,这没有意义。一个对象已经知道它是什么类型。你的代码片段对我来说不够清晰,无法帮助你做你正在寻找的东西。 – 2010-04-27 20:49:13
RSChild.RSObject是一个包含对象的属性,我需要为该直播的第二个参数获取该对象的类型。 – msarchet 2010-04-27 21:06:48