2016-12-29 32 views
1

有沒有辦法使VB.NET函數變形,當涉及到列表?下面的代碼給了我一個「無效的轉換」錯誤:VB.NET和多態性

Sub TestBase() 
    Dim a#() 
    a = VEC.New_(42, 51, 2, 3, 4, 5) 'never mind, this just creates a non-empty list 
    'at this point, a is a double() 
    ARR.append(a, 5) 
End Sub 
Public Sub append(ByRef v, Val) 
    ReDim Preserve v(0 To UBound(v) + 1) 'this line casts v into a object() 
    v(UBound(v)) = Val 
End Sub 

是否有作出每一個類型功能的fastiduous方式這樣做,除了有正確的方法是什麼?

+1

泛型:

這就是說,你的問題可以通過使用類似下面的仿製藥來解決?公共子追加(T)(byref v()as T,Val as T) – Mr47

+0

是的,這是訣竅,謝謝! – Pierre

+2

使用無類型代碼,同時使用現代語言,允許你使用'Option Strict On',所以...... 90年代 –

回答

0

由於rory.ap提到,你真的應該使用列表。

public sub append(of T)(byref v() as T, Val as T) 
     ReDim Preserve v(0 To UBound(v) + 1) 
     v(UBound(v)) = Val 
end sub 
+0

謝謝!但我必須學會使用這些泛型:如果A abd B都是T類型,則 Pierre

+1

@Pierre這是因爲,由於使用泛型,編譯器不知道如何比較項目,或者甚至可以進行比較。你可以使用「公共子追加(T作爲IComparable)」來表示比較必須存在。 – Mr47

+0

再次感謝! :-) – Pierre

3

首先,我會使用另一種類型的集合,比如List(Of T)而不是數組,因爲它們更易於使用。

然後,你可以這樣做:

Dim a As New List(Of Double) 
a.Add(5)