假设我有一个
Class ViewerManager(Of ViewTable)
在里面,我有一个
Protected ReadOnly Property StoredView As ViewTable
里面有一个Get
我有这样的东西
#Region "View Object Properties"
Enum ViewerManagerTemplate
Unkown = 1
TblMemorizedFilterPage = 2
TblMemorizedAEV = 3
End Enum
Protected _ManagerTemplate As ViewerManagerTemplate = ViewerManagerTemplate.Unkown
Protected ReadOnly Property ManagerTemplate As ViewerManagerTemplate
Get
If _ManagerTemplate = ViewerManagerTemplate.Unkown Then
If PageID > 0 Then
_ManagerTemplate = ViewerManagerTemplate.TblMemorizedFilterPage
Else
_ManagerTemplate = ViewerManagerTemplate.TblMemorizedAEV
End If
End If
Return _ManagerTemplate
End Get
End Property
Protected InitializedStoredView As Boolean = False
Protected _StoredView As ViewTable = Nothing
Protected ReadOnly Property StoredView As ViewTable
Get
If Not InitializedStoredView Then
InitializedStoredView = True
Select Case ManagerTemplate
Case ViewerManagerTemplate.TblMemorizedFilterPage
If PageObject.StoredViewID > 0 Then
_StoredView = CType(CType(BOs.CustomGridBO.GetMemorizedFilterPage(PageObject.StoredViewID), Object), ViewTable)
End If
End Select
End If
Return _StoredView
End Get
End Property
#End Region
这里,在
行_StoredView = CType(CType(BOs.CustomGridBO.GetMemorizedFilterPage(PageObject.StoredViewID), Object), ViewTable)
我确信BOs.CustomGridBO.GetMemorizedFilterPage
会返回TblMemorizedFilterPage
个实例,我确信如果执行此行,那么ViewTable
也是TblMemorizedFilterPage
,因此双CType
似乎对我来说是一种矫枉过正。我能以某种方式简化这个吗?
编辑:
由于评论部分存在混淆,我认为我需要提供更多信息。 TblMemorizedFilterPage
和TblMemorizedAEV
都是类,具有相同名称的枚举值以这些类命名。
答案 0 :(得分:0)
当ViewTable为TblMemorizedAEV时,您别无选择。然后那条线看起来像。
_StoredView = CType(CType(BOs.CustomGridBO.GetMemorizedFilterPage(PageObject.StoredViewID), Object), TblMemorizedAEV)
因为您无法将TblMemorizedFilterPage强制转换为TblMemorizedAEV。您唯一的选择是首先将编译器转换为Object来欺骗编译器。哪个是彼此共有的唯一基类。
如果你有很多If语句,我会考虑使用Class ViewerManager(Of ViewTable)作为基类。子类将处理这些特定情况。
我也觉得很奇怪,模板类型依赖于枚举,但枚举不是基于模板类型。你做什么ViewerManager(Of TblMemorizedAEV)和PageID大于0。