2016-12-29 15 views
1

VB.NET関数polymorphをリストにする方法はありますか?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

ジェネリック:言っ

は、あなたの問題は、以下のようなジェネリック医薬品を使用することによって解決することができますか? public sub append(of T)(byref v()をT、ValをTとして) – Mr47

+0

はい、このトリックはありがとう! – Pierre

+2

'Option Strict On 'を使用できるようにする現代的な言語を使用している間、型指定されていないコードを使用しています... 1990s –

答えて

0

次に、あなただけのこの操作を行うことができます。

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 Pierre

+1

@Pierreそれはジェネリックを使用するため、コンパイラは項目を比較する方法を知らない、または比較することができたとしても。比較が存在する必要があることを示すために、 "public sub append(TのIComparable)"を使用することができます。 – Mr47

+0

もう一度ありがとう! :-) – Pierre

3

まず、アレイというよりは、List(Of T)のような別のタイプのコレクションを使用します。なぜなら、はるかに扱いやすいためです。 rory.apは述べているように、あなたが本当にリストを使用する必要があります

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