Gå til innhold

SortedList(of Key, Value) med objekt som KEY


Anbefalte innlegg

Heisan

Er det problemer med å bruke en klasse som KEY?

Jeg har følgende definisjon:

Public UsersInGroup as SortedList(of Filemanager.RecordClass, FileManager.RecordClass)

 

Når jeg adder første record i denne lilsten går alt greit, men neste record resulterer i en Exception:

InnerException = {"Minst ett objekt må implementere IComparable."}

Message = "Kan ikke sammenligne to elementer i matrisen."

 

Er det rett og slett ikke mulig å bruke annet en enkle datatyper som key? Ser jo at komplexiteten blir enorm for framework hvis KEY kan være en klasse, men det står jo ikke noe om dette i dokumentasjonen. Ei heller får jeg feil i koden.

 

Grunnen til at jeg gjør det på denne måten er jo fordi jeg har en datafil som leses inn i en RecordClass, som igjen addes i sine respektive køer

Lenke til kommentar
Videoannonse
Annonse

Joda, dette går ann. Klassen du putter inn i SortedList må bare implementere IComparable. I eksempelet ditt må bare Filemanager.RecordClass implementere IComparable så skal det virke helt fint :)

 

Du kan også sortere enn vanlig System.Collection.Generic.List ved å bruke minArray.Sort() med parameter til et objekt som er av en klasse som implementerer IComparer.

Lenke til kommentar
Joda, dette går ann. Klassen du putter inn i SortedList må bare implementere IComparable.  I eksempelet ditt må bare Filemanager.RecordClass implementere IComparable så skal det virke helt fint :)

 

Du kan også sortere enn vanlig System.Collection.Generic.List ved å bruke minArray.Sort() med parameter til et objekt som er av en klasse som implementerer IComparer.

8455042[/snapback]

AHA - så hvis klassen inneholder IComparable så vil Sortedlist.add(key,value) bruke denne i KEY objektet. Topp. Påkker, .NET er jaggu bra

Lenke til kommentar

Når du implementerer IComparable må du også lage funksjonen:

 

public int Compare(object x, object y);

 

 

returnerer negativt tall hvis X > Y

returnerer 0 om de er like

returnerer positivt tall om X < Y

 

(eller omvent... bruker alltid prøv&feil metoden når jeg lager den ;))

 

 

Hvis du har en verdi i wndFakturahode som du vil bruke kan du jo bare:

 

public int Compare(object x, object y)

{

return ((wndFakturahode)x).MinVerdi.CompareTo( ((wndFakturahode)y).MinVerdi );

}

 

 

sånn ca....

Endret av jorn79
Lenke til kommentar

Aha, ikke værre nei. Med andre ord, det er jeg selv som bestemmer hvordan sammenligningen skal være. Ikke så magisk alikevel med andre ord, men alikevel veldig imponerende.

 

Jeg er ikke vant til å få så mye "gratis" som .NET gir. Føler virkelig jeg har brukt mye tid til tullball når jeg har tviholdt på Clarion i så mange år. Synd å finne dette ut i versjon 3 av .NET :p

 

Vel, nytter ikke gråte over spillt melk......

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...