Item-Suche in einer generischen Klasse

Hallo zusammen

Im Anhang sind alle 3 benötigten Klassen auscodiert. clsTerrain ist die Objekt-Klasse. Diese Klasse wird in clsTerrainList n-mal instanziert. Da es mehrere Klassen mit einem ähnlichen Design gibt, erbt clsTerrainList von der Klasse clsList. Dies sind die ‚Standard‘-Funktionen wie Count, Remove, etc. Um auf ein Item über den Namen zugreifen zu können, habe ich in clsList die Funktion Item eingefügt. Hier ist auch das Problem: Da clsList eine generische Klasse ist, weiss diese nicht, dass jede Objekt-Klasse das Property Name kennt. Deshalb gibt der Compiler einen Fehler aus. (Im Code fett markiert)

Wie kann ich dieses Problem beheben? Oder ist etwa mein Ansatz falsch?

Danke für eure Hilfe…

_
Public Class clsTerrain
Protected mobjMainClass As Main = Nothing
Private mstrName As String = String.Empty

Public Sub New(ByRef MainClass As Main)
mobjMainClass = MainClass
End Sub

Protected Overrides Sub Finalize()
mobjMainClass = Nothing
MyBase.Finalize()
End Sub

Public Property Name() As String
Get
Return mstrName
End Get
Set(ByVal Value As String)
mstrName = Value
End Set
End Property
End Class
_
Public Class clsTerrainList
Inherits clsList(Of clsTerrain)

Public Sub New(ByRef MainClass As Main)
MyBase.New(MainClass)
End Sub

Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub

Public Function Add(ByVal Name As String) As clsTerrain
Dim obj As clsTerrain = Nothing

Try
If MyBase.Item(Name) Is Nothing Then
obj = New clsTerrain(MyBase.mobjMainClass)
obj.Name = Name

MyBase.mobjList.Add(obj)
End If

Return MyBase.Item(Name)
Catch ex As Exception
MyBase.mobjMainClass.RaiseComponentError(ex.Message, Me.GetType.Name)
Return Nothing
End Try
End Function
End Class
_
Public MustInherit Class clsList(Of T As Class)
Protected mobjMainClass As Main = Nothing
Protected mobjList As List(Of T) = New List(Of T)

Public Sub New(ByRef MainClass As Main)
mobjMainClass = MainClass
End Sub

Protected Overrides Sub Finalize()
Call RemoveAll()

mobjList = Nothing
mobjMainClass = Nothing

MyBase.Finalize()
End Sub

Public Function Count() As Integer
Return mobjList.Count
End Function

Public Sub Remove(ByVal Index As Integer)
mobjList.RemoveAt(Index)
End Sub

Public Sub Remove(ByVal Key As String)
mobjList.Remove(Item(Key))
End Sub

Public Sub RemoveAll()
mobjList.Clear()
End Sub

Public Function Item(ByVal Key As String) As T
Return mobjList.Find(Function(f As T) f.Name = Key)
End Function

Public Function Item(ByVal Index As Integer) As T
Return mobjList.Item(Index)
End Function
End Class

Hi,
ich bin zwar nicht so gut in VB, arbeite mit C# aber wieso erstellst du dir nicht ein Interface und typisiertst T?
Lg Knerd