List(T)-Klasse nicht verfügbar - Ersatz vorhanden?

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    List(T)-Klasse nicht verfügbar - Ersatz vorhanden?

    Hi,

    ich versuche eine Liste in VB.NET zu erstellen (Private list as New List(Of Stuff))
    Nun, List(T) habe ich leider nicht zur Verfügung, da ich mit dem Microframework arbeiten muss. Kann man als VB mit Net.Framework 1.0 bis 2.0 vergleichen. Und diverse Sachen haben sie genommen, um Code zu sparen. Da aber meine geplante Application nicht allzugross ist, ist mir dies egal.

    Nun wollte ich fragen, ob es einen geeigneten Ersatz gibt oder ob man List(t) selber hinzufügen kann.

    mfg

    gfcwfzkm
    @gfcwfzkm: Hol Dir IL-Spy und dekompiliere unter [mscorlib]System.Collections.Generic die List<T>-Klasse.
    Implementiere das, was Du brauchst nach dem Schema dort.
    Vom Prinzip her ist das nur ein Array bei dem die vorgegaukelte Listengröße in einer separaten Variable gespeichert wird. Fügst Du ein Item hinzu, prüfst Du, ob genug Platz vorhanden ist. Falls nicht, verdoppelst Du die Größe des Arrays.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ist das wirklich wahr? - ich kanns eiglich kaum glauben.
    Ich kann mir nicht vorstellen, dasses ein so behindertes Framework gibt, was nichtmal olle List(Of T) nicht enthält - die Mutter aller Auflistungen.

    Was enthält das Framework dann?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hi
    List(Of T) ist einfach ein Array, das neu skaliert wird, sobald die Kapazität des Arrays erreicht wird. Normalerweise verdoppelt man die Größe des Arrays einfach. Bei Remove-Operationen halbiert man die Zahl der Array-Elemente, wenn ein Viertel der Kapazität erreicht wird oder so. Wichtig ist, dass die Array-Kapazität nicht der Anzahl der Listenelemente entspricht, sondern häufig wesentlich mehr. Dadurch verhindert man ständiges Kopieren der Array-Elemente.

    Wozu ILSpy, wenn es auch ein Hirn gibt? ;)

    Btw. vielleicht heißt es auch nur anders. Gibt auch Sprachen, bei denen das eher Vector<T> wäre oder so.

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Hmm, werde ilspy ausprobieren.
    @ErfinderdesRades
    Das Microframework ist für Microcontroller. Jedoch auch z.T. Ein Schlag in die Steinzeit. Wie gesagt, kann man mit net 1.x vergleichen. Hab recherchiert und das netmf bietet die ArrayList. Ist das auch brauchbar?

    Mfg

    Gfc
    ArrayList ist der ungenerische Vorläuferr von List(Of T).
    Alles, was ich mir vorstellen kann, ist, dass generische Programmierung dort insgesamt nicht unterstützt wird. Weil die Kern-Funktionalität einer List(Of T) kannman glaub in 20 Zeilen hinschreiben - also es gibt keinen Grund, in etwas, was sich "Framework" nennt, auf dieses Teil zu verzichten.

    Probierma, ob du ühaupt einen generischen Code schreiben kannst, etwa ob

    VB.NET-Quellcode

    1. public function Echo(Of T)(value as T)As t
    2. return Value
    3. end function
    ob das kompiliert.
    Bekomme diese Fehler mit der Funktion:
    Cannot parse method signature 'Echo' in der Datei METADATAPROCESSOR, die nicht exestiert und...
    0x8101009 in der Datei MMP die auch nicht exestiert.

    Sieht so aus, als ob generischen Code nicht akzeptiert wird... :/

    Muss also sehen, das ich mit ArrayList was machen kann... :O

    mfg

    gfc
    Das ist auch ganz offensichtlich, warum es keine generischen Typen gibt. Da das ja, wie du gesagt hast, für Microcontroller ist, wird der Code vermutlich auch nicht von der CLR verwaltet. Dies ist aber für generische Typen erforderlich, da diese in .Net nicht wie in C++ vorkompiliert werden (dort wird ja für jede Verwendung tatsächlich eine nicht-generische Klasse erzeugt, die dann den jeweiligen Typen verwaltet), sondern tatsächlich generisch bleiben.