【发布时间】:2019-09-05 19:44:41
【问题描述】:
我有一个没有指定返回类型的函数,它根据枚举 type 输入参数返回一个通用 List(Of T),因此:
Public Function GetTypeList(type as TypeListEnum)
Select Case type
Case TypeListEnum.A
'create result As List(Of A)
Return result
Case TypeListEnum.B
'create result As List(Of B)
Return result
...etc.
Case Else
Return Nothing
End Select
End Function
在每个块中创建结果的代码行都是相同的——除了定义要返回的列表类型的部分——所以我想如果我能以某种方式指定变量的 T 是什么会很好,而不是在多个案例块中拥有那些几乎相同的代码块。
有什么办法吗?
如果没有,是否有另一种(也许更好)方法可以根据输入参数返回不同的通用列表?
【问题讨论】:
-
这个函数本身应该是通用的可能性很大。但它is possible.
-
这可以使用泛型来完成。
-
type参数的值究竟来自哪里,即您调用此方法的准确程度如何?我同意@HansPassant 的观点,最可能的解决方案是重新实现您拥有的通用方法。 -
@jmcilhinney,你是什么意思,“
type是从哪里来的?” 这是一个基本的公共枚举,所以该函数被调用例如Dim myList as List(Of Booking) = GetTypeList(TypeListEnum.Booking). -
那么你的意思是你只是在硬编码它?如果是这样,那么您绝对应该使用通用方法并改用
Dim myList = GetTypeList(Of Booking)()。顺便说一句,你显然有Option Strict Off,这很糟糕。这是您当前拥有的代码可以编译的唯一方法,因此它显然是错误的代码。