Dictionary durchblättern - Ist das möglich?

31/10/2007 - 02:17 von Robert Hauffe | Report spam
Hallo,

also mit einer List(Of) funktioniert das ja ganz einach. Man làsst sich
mit IndexOf die aktuelle Position geben und addiert oder subtrahiert
dann immer eins und blàttert sich somit durch die Liste.

Wie sieht das aber bei einem Dictionary aus? Geht das da auch?

Mit der Hilfe der VB-internen Hilfe habe ich es soweit geschafft:

Dim x As IDictionaryEnumerator = .machines.GetEnumerator
Dim mn As Boolean = x.MoveNext
Dim y As KeyValuePair(Of Integer, MachineClass) = x.Current
MsgBox(y.Key)

Laut VB-Hilfe sollte das so funktionieren, tut es aber nicht. VB
unterstreicht das "x.Current" und sagt, dass eine Umwandlung von Object
in KeyValuePair bei "Option Strict On" nicht möglich ist (sollte
x.Current eigentlich nicht gleich ein KeyValuePair liefern?).

Wenn man "Option Strict On" ausschaltet oder die angebotene Korrektur
mit CType übernimmt, bekommt man zur Laufzeit den Fehler, dass eine
Umwandlung nicht möglich ist.

Hat jemand irgendeine Idee was ich falsch gemacht habe?

Mit MoveNext kann man wohl nur vorwàrts blàttern. Gibt es eine
Möglichkeit auch rückwàrts zu blàttern?

Robert
 

Lesen sie die antworten

#1 Robert Schneider
31/10/2007 - 06:20 | Warnen spam
"Robert Hauffe" schrieb im Newsbeitrag
news:

Hallo Robert,

also mit einer List(Of) funktioniert das ja ganz einach. Man làsst sich
mit IndexOf die aktuelle Position geben und addiert oder subtrahiert dann
immer eins und blàttert sich somit durch die Liste.



Was meinst du denn damit? Ab einer Stelle die Liste durchgehen, wo das
gesuchte Objekt zum ersten Mal in der Liste vorkommt? Also etwa so:

For i As Integer = myList.IndexOf(theObject) To myList.Count - 1

IndexOf liefert ja die Position des ersten Vorkommens eines Objekts.


Dim x As IDictionaryEnumerator = .machines.GetEnumerator
Dim mn As Boolean = x.MoveNext
Dim y As KeyValuePair(Of Integer, MachineClass) = x.Current
MsgBox(y.Key)




Was du bràuchtest wàre:

Dim x As IDictionaryEnumerator = .machines.GetEnumerator(Of Integer,
MachineClass)

Dann ist x.Current nicht mehr vom Typ Object, sondern KeyValuePair(Of
Integer, MachineClass), weswegen du y dann nicht mehr bràuchtest.

Wàre For Each nicht besser/einfacher? Also:

For Each item As KeyValuePair(Of Integer, MachineClass) In myDictionary
MsgBox(item.Key)
Next

Gruß vom Namensvetter

e-mail: r_.s_chnei_der\wein_gart_ner.com (remove all '_' and replace '\'
with
'@')

Ähnliche fragen