2013-05-07 59 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()...