Überprüfen Sie, ob ein Datensatz in einer VB6-Sammlung vorhanden ist.
Habe ich erbte einen großen VB6-app auf meinem aktuellen Arbeitsplatz. Ich bin irgendwie lernen VB6 auf der Arbeit und es sind eine Reihe von Problemen, die ich habe. Das größte Problem im moment ist, kann ich nicht herausfinden, wie um zu überprüfen, ob ein Schlüssel vorhanden ist, die in einem Collection-Objekt. Kann mir jemand helfen?
InformationsquelleAutor der Frage user4315 | 2008-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein standard-Funktion ist sehr einfach. Dies funktioniert unabhängig von den Typ des Elements, da es nicht stört dabei keine Zuordnung, sondern lediglich ausführt, dass die "collection" - Eigenschaft erhalten.
InformationsquelleAutor der Antwort Christian Hayter
@Mark Biek Ihre keyExists ehesten entspricht meinem standard Vorhanden ist () - Funktion. Um die Klasse nützlicher für die COM-ausgesetzt Sammlungen und überprüfung von numerischen Indizes, würde ich empfehlen ändern sKey und myCollection nicht eingegeben werden. Wenn die Funktion verwendet wird, mit einer Sammlung von Gegenständen, " set " erforderlich ist (auf der Linie, wo val ist).
BEARBEITEN: Es war nervt mich, ich habe nie bemerkt, die unterschiedliche Anforderungen an eine Objekt-Basis und value-Basis Vorhanden ist () - Funktion. Ich sehr selten verwenden Kollektionen für nicht-Objekte, aber dies schien wie eine perfekte Engpass für einen Fehler, der so schwer auf die Spur, wenn ich benötigt, um zu überprüfen für die Existenz. Da die Fehlerbehandlung schlägt fehl, wenn ein Fehler-handler ist bereits aktiv, zwei Funktionen, die erforderlich sind, um einen neuen Fehler Anwendungsbereich. Nur die Exists () - Funktion muss immer aufgerufen werden:
Und überprüfen Sie die Funktionalität:
InformationsquelleAutor der Antwort Thomas G. Mayfield
Ich es immer getan haben, mit einer Funktion wie folgt:
InformationsquelleAutor der Antwort Mark Biek
Wie bereits von Thomas, die Sie benötigen, um ein Objekt statt Lassen. Hier ist eine Allgemeine Funktion aus meiner Bibliothek, die Werke von Wert und Objekt-Typen:
Als auch beraten von Thomas, Sie können ändern Sie den Collection-Typ zu Objekt zu verallgemeinern. Die .Item(key) syntax ist, teilen die meisten collection-Klassen, also das könnte tatsächlich nützlich sein.
BEARBEITEN Scheint, wie ich geschlagen wurde, um den Schlag etwas von Thomas selbst. Aber für die einfachere Wiederverwendung, die ich persönlich bevorzuge eine einzelne Funktion ohne private Abhängigkeiten.
InformationsquelleAutor der Antwort jevakallio
Verwendung der error-handler catch-Fällen, wenn der Schlüssel nicht vorhanden ist in der Sammlung machen kann-debugging mit "break on all errors" - option, sehr ärgerlich. Um zu vermeiden, unerwünschte Fehler, die ich ziemlich oft erstellen Sie eine Klasse, die die gespeicherten Objekte in einer Sammlung und alle Schlüssel in einem Dictionary. Wörterbuch exists(key) -Funktion, so kann ich rufen Sie, dass, bevor Sie versuchen, ein Objekt aus der Auflistung. Sie können nur strings speichern in einem Wörterbuch, so eine Sammlung ist immer noch notwendig, wenn Sie brauchen, um Objekte zu speichern.
InformationsquelleAutor der Antwort Kaniu
Die Anweisung "error handling schlägt fehl, wenn ein Fehler-handler ist bereits aktiv" ist nur zum Teil richtig.
Können Sie mehrere error-Handler in Ihre routine.
So könnte man Platz für die gleiche Funktionalität in nur einer Funktion.
Einfach ändern Sie Ihren code wie folgt:
Jedoch, wenn Sie nur integrieren Sie den code in der TryNonObject Abschnitt der routine, würde dies ergeben die gleichen Informationen.
Wird es gelingen, für beide Objekte und nicht-Objekte.
Es wird die Geschwindigkeit Ihres code für nicht-Objekte, da Sie nur zur Ausführung einer einzelnen Anweisung zu behaupten, dass das Element vorhanden in der Sammlung.
InformationsquelleAutor der Antwort R. van Drie
Bessere Lösung würde sein, schreiben einen TryGet Funktion. Eine Menge der Zeit, die Sie gehen, um zu prüfen, vorhanden ist, und dann immer die Sache. Sparen Sie Zeit, indem Sie es zur gleichen Zeit.
InformationsquelleAutor der Antwort
sehen
http://www.visualbasic.happycodings.com/Other/code10.html
die Umsetzung hat dabei den Vorteil, dass auch Optional Rückgabe des gefundenen Elements, und arbeitet mit dem Objekt/native Typen (nach den Kommentaren).
hier wiedergegeben, da der link nicht mehr verfügbar:
Bestimmen, ob ein Element existiert in einer Sammlung
Folgende code zeigt, wie Sie ermitteln, ob ein Element existiert in einer Sammlung.
InformationsquelleAutor der Antwort Vijay
Während der Suche nach einer Funktion, wie ich es entworfen wie folgt.
Dies sollte die Arbeit mit Objekten und nicht-Objekten ohne Zuweisung eine neue Variable.
InformationsquelleAutor der Antwort Martin