簡體   English   中英

VB .NET DirectCast和類型反射

[英]VB .NET DirectCast and Type Reflection

我正在處理的應用程序有一個通用的父窗體,稱為RSChild,用於執行某些操作,具體取決於其中包含的控件是處於MdiTabManager中還是位於其自身的模式窗體中。 然后,從稱為ObjectEdit的接口的Inherit中繼承了實際的用戶控件(我們允許對其進行編輯的對象)。 在我的代碼中,我正在這樣做。

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(page)是一個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的行為,我感覺這是不可能的。

改用TryCast。 如果對象不是預期的類型,則返回Nothing。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM