2013-05-07 73 views
0

我有一个函数返回我们目录中的零件列表。调用重载函数方法

该函数按预期工作,但我自此发现还需要创建一个重载函数,该函数仅返回整个零件目录的子集。

目前,我已经写了这样的原始函数和重载函数。

Public Function GetpartsList() As IEnumerable(Of PartsWarehouse) 
    Return From p In mySession.Query(Of PartsWarehouse)() 
End Function 

Public Function GetpartsList(Engine As Boolean) As IEnumerable(Of PartsWarehouse) 
    Return From p In mySession.Query(Of PartsWarehouse)() _ 
    .Where(Function(p) p.IsEngineOnly) 
End Function 

而且我调用这两个函数。

GetPartsList() 
GetPartsList(isEngine) 

但这似乎有种直觉,因为即使我通过对“发动机”的值,我从来没有真正使用它。

是否有更重要的方式来重载此功能?也许我应该只有一个函数,并在其中包含某种if/else逻辑。

+0

能重载的版本,如果你更一般的消费者设置使用了一种类型的零件?不知道哪些字段/属性返回,所以很难说。 – dbasnett 2013-05-07 17:26:45

回答

1

你在问这样的事情吗?

Public Function GetpartsList(optional Engine As Boolean = false) As IEnumerable(Of PartsWarehouse) 
    dim query = mySession.Query(Of PartsWarehouse)() 
    if Engine then 
     query = query.Where(Function(p) p.IsEngineOnly) 
    end if 
    return query.ToList() 
End Function 
+0

是的,这将工作,我没有考虑包括一个可选参数。谢谢 – SkyeBoniwell 2013-05-07 15:23:58

+1

@ 999cm999使用可选参数时,请始终记住可选值绑定到呼叫站点。 – asawyer 2013-05-07 15:24:50

2

这不是过载而是不同的功能。你可以采取一个布尔值作为paramater但随后会发生什么,如果你需要创建另一个子在这种情况下,它会更好,更清晰,如果你有

Public Function GetEngines()... 
Public Function GetPartsList()...