vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Generische Basisklasse gesucht 
Autor: Schü
Datum: 27.08.10 19:04

Ok Danke Leute.

Habe in der Not folgende generische Klasse abgeleitet, in der allerdings der Schlüssel ein Integer (Nr) ist. dies könnte man aber über Public Class KeyedCollection(Of TKey,TValue) auch generisch machen:

Public Class KeyedCollection(Of T)
    Implements IEnumerable(Of T)
    Implements IList(Of T)
    Implements ICollection(Of T)
 
    Private mInnerList As List(Of T)
    Private mKeyList As Dictionary(Of Integer, T)
 
    Public Sub New()
        mInnerList = New List(Of T)
        mKeyList = New Dictionary(Of Integer, T)
    End Sub
 
#Region "ICollection"
    Public Sub Add(ByVal item As T) Implements _
      System.Collections.Generic.ICollection(Of T).Add
        mInnerList.Add(item)
        'TODO: mKeyList.Add(Nr)
    End Sub
 
    Public Sub AddRange(ByVal items() As T)
        mInnerList.AddRange(items)
        For Each e As T In items
            'TODO: mKeyList.Add(Nr)
        Next
    End Sub
 
    Public Sub Clear() Implements System.Collections.Generic.ICollection(Of _
      T).Clear
        mInnerList.Clear()
        mKeyList.Clear()
    End Sub
 
    Public Function Contains(ByVal item As T) As Boolean Implements _
      System.Collections.Generic.ICollection(Of T).Contains
        Return mInnerList.Contains(item)
    End Function
 
    Public Function ContainsKey(ByVal Nr As Integer) As Boolean
        Return mKeyList.ContainsKey(Nr)
    End Function
 
    Public Sub CopyTo(ByVal array() As T, ByVal arrayIndex As Integer) _
      Implements System.Collections.Generic.ICollection(Of T).CopyTo
        mInnerList.CopyTo(array, arrayIndex)
    End Sub
 
    Public ReadOnly Property Count() As Integer Implements _
      System.Collections.Generic.ICollection(Of T).Count
        Get
            Return mInnerList.Count
        End Get
    End Property
 
    Public ReadOnly Property IsReadOnly() As Boolean Implements _
      System.Collections.Generic.ICollection(Of T).IsReadOnly
        Get
            Return False
        End Get
    End Property
 
    Public Function Remove(ByVal item As T) As Boolean Implements _
      System.Collections.Generic.ICollection(Of T).Remove
        'TODO: mKeyList.Remove(Nr)
        Return mInnerList.Remove(item)
    End Function
 
    Public Function RemoveKey(ByVal Nr As Integer) As Boolean
        Dim Item As T = mKeyList(Nr)
        mKeyList.Remove(Nr)
        mInnerList.Remove(Item)
    End Function
#End Region
#Region "IList"
    Public Function IndexOf(ByVal item As T) As Integer Implements _
      System.Collections.Generic.IList(Of T).IndexOf
        Return mInnerList.IndexOf(item)
    End Function
 
    Public Function IndexOfKey(ByVal Nr As Integer) As Integer
        Return IndexOf(mKeyList(Nr))
    End Function
 
    Public Sub Insert(ByVal index As Integer, ByVal item As T) Implements _
      System.Collections.Generic.IList(Of T).Insert
        mInnerList.Insert(index, item)
        'TODO: mKeyList.Add(Nr)
    End Sub
 
    Default Public Property IndexItem(ByVal index As Integer) As T Implements _
      System.Collections.Generic.IList(Of T).Item
        Get
            Return mInnerList.Item(index)
        End Get
        Set(ByVal value As T)
            mInnerList.Item(index) = value
        End Set
    End Property
 
    Public ReadOnly Property KeyItem(ByVal Nr As Integer) As T
        Get
            Return mKeyList(Nr)
        End Get
    End Property
 
    Public Sub RemoveAt(ByVal index As Integer) Implements _
      System.Collections.Generic.IList(Of T).RemoveAt
        Dim Item As T = mInnerList.Item(index)
        mInnerList.RemoveAt(index)
        'TODO: mKeyList.Remove(Nr)
    End Sub
#End Region
    Public Function GetEnumerator() As System.Collections.Generic.IEnumerator( _
      Of T) Implements System.Collections.Generic.IEnumerable(Of _
      T).GetEnumerator
        Return mInnerList.GetEnumerator
    End Function
 
    Public Function GetEnumerator1() As System.Collections.IEnumerator _
      Implements System.Collections.IEnumerable.GetEnumerator
        Return mInnerList.GetEnumerator
    End Function
End Class
Das einzigste, was ich noch implementieren muss, ist bei Add() un Remove() einen Parameter für den Schlüssel. Dies habe ich dannach so gemacht, dass ich dem zu speichernden Typ T eine Key-Eigenschaft spendiert habe, sodaß ich den Schlüssel für die KeyList über T.Key bekomme.
Das ist leider keine endgültige Lösung, da ich so keine normalen Datentüpen speichern kann.

Gibt's eine andere Lösung für den Key?

Schü

Beitrag wurde zuletzt am 27.08.10 um 19:22:06 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Generische Basisklasse gesucht1.929Schü26.08.10 12:08
Re: Generische Basisklasse gesucht1.237ModeratorRalfE26.08.10 14:27
Re: Generische Basisklasse gesucht1.212ModeratorDaveS26.08.10 16:05
Re: Generische Basisklasse gesucht1.206ModeratorRalfE26.08.10 21:51
Re: Generische Basisklasse gesucht1.208Schü26.08.10 14:51
Re: Generische Basisklasse gesucht1.175ModeratorRalfE26.08.10 22:08
Re: Generische Basisklasse gesucht1.190Drapondur27.08.10 00:30
Re: Generische Basisklasse gesucht1.241ModeratorDaveS27.08.10 11:23
Re: Generische Basisklasse gesucht1.296Schü27.08.10 19:04

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel