2009-08-12 84 views
0

我有一個類似於下面的函數。我想修改它,所以我可以傳入多種類型來過濾而不是一個。我不認爲有類型參數的params/paramarray選項,是嗎?有沒有辦法爲泛型類型添加類似params選項的東西?

Public Shared Function Filter(Of T)() 
    Dim results As New List(Of T) 
    For Each item In GlobalCollection.All() 
     If GetType(T).IsAssignableFrom(item.GetType()) Then 
      results.Add(instance) 
     End If 
    Next 
    Return results.ToArray() 
End Function 

我希望能夠調用它像:

Filter(Of Car) 

也喜歡:

Filter(Of Car, Truck, Boat) 
+0

爲什麼在世界上你將結果轉換爲數組?你應該爲你的函數指定返回類型。 – 2009-08-12 19:12:12

+0

是的,那會是一個錯字。我實際上正在返回一個Ienumerable(Of T) – adam0101 2009-08-12 19:59:04

回答

4

號,類型參數的數量是固定在編譯時(對於泛型類型和方法)。但是,您可以通過類型參數的數量過載 - 因此您可以使用不同數量的類型參數來創建N個不同版本的方法。

(這有點像ActionAction(Of T)Action(Of T1, T2)等)

+0

我喜歡它,所以我可以傳入任意數量的類型。 – adam0101 2009-08-12 19:30:21

+0

這只是不支持,恐怕。無論如何,我不能立即看到你的方法會被擴展到多種類型...... – 2009-08-12 19:36:25

1

你可以使功能看起來更像是這樣的:

Public Shared Function Filter()(ByVal FilterTypes As IEnumerable(Of Type)) As IList(Of Object) 

但你不得不返回對象的集合。

更好的選擇是爲您的類型定義某種類型的繼承結構(可能是接口)。所以你的「汽車」,「卡車」和「小船」類型都將實施或繼承基礎的「車輛」類型。

相關問題