2 Stimmen

list.sort funktioniert nicht in vb.net

Ich habe ein etwas merkwürdiges Problem, das höchstwahrscheinlich auf eine Dummheit meinerseits zurückzuführen ist, aber beim besten Willen kann ich (und andere Mitglieder meines Teams) es nicht erkennen.

Ich habe ein Objekt, das eine generische Listeneigenschaft enthält, die ich sortieren möchte. Ich habe eine Comparer-Klasse geschrieben, um dies für mich zu tun, und ich rufe sie auf folgende Weise auf:

baseObject.ListOfThings.Sort(new ThingComparer())

Ich habe meine Vergleichsfunktion getestet und sie gibt die richtigen Werte zurück.

Nach dem Sortieraufruf bleibt die Liste jedoch unverändert. Habe ich etwas Offensichtliches übersehen, oder gibt es etwas anderes, das ich tun muss.

Vielen Dank!

EDIT: Ja, ich war ein Narr, und die Eigenschaft, die eine Liste zurückgibt, wurde jedes Mal, wenn auf sie zugegriffen wurde, von Grund auf neu erstellt. Vielen Dank für Ihre Hilfe, und ich werde versuchen zu lernen, die Dinge besser zu überprüfen, bevor ich um Hilfe bitte in Zukunft

1voto

Scott Ivey Punkte 39470

Erzeugt Ihr Basisobjekt die Liste bei jedem Zugriff neu? Jedes Mal, wenn mich jemand um Hilfe bei diesem Problem gebeten hat, hat sich dies als das Problem herausgestellt. Vielleicht ist die Eigenschaft ruft eine Datenbank, den Aufbau der Liste, wenn seine zugegriffen, etc...

0voto

Garry Shutler Punkte 31414

Sieht für mich völlig in Ordnung aus. Gibt die Eigenschaft ListOfThings eine kopieren. der zugrunde liegenden Liste vielleicht?

Dann würden Sie eine Kopie der Liste sortieren, die dann verloren geht, und Sie erhalten beim nächsten Aufruf von ListOfThings eine neue Kopie der Liste in der ursprünglichen Reihenfolge.

0voto

dr. evil Punkte 26388

Ich kenne den Rest des Codes nicht, aber wie wäre es, wenn Sie etwas wie das Folgende versuchen:

baseObject.ListOfThings.Sort(AddressOf ThingComparer) 

(vorausgesetzt, Sie haben Shared Function zum Aufrufen)

0voto

JaredPar Punkte 699699

Um zu verstehen, was hier vor sich geht, brauchen wir etwas mehr Kontext darüber, wie ListOfThings implementiert ist. Insbesondere müssen wir wissen

  • Ist es eine Immobilie. Wenn ja, zeigen Sie uns bitte die Get-Methode
  • Was ist der Typ von ListOfThings

Es scheint sich um eine Eigenschaft zu handeln, und es gibt zahlreiche Möglichkeiten, diese so zu implementieren, dass sie dieses Verhalten hervorrufen würde. Zum Beispiel würde die folgende Definition genau das Verhalten verursachen, das Sie sehen

Public ReadOnly Property ListOfThings As List(Of Thing) 
  Get
    Return New List(Of Thing)(someInternalList)
  End Get
End Property

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X