HDSoftware Skrevet 23. april 2007 Del Skrevet 23. april 2007 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
Manfred Skrevet 23. april 2007 Del Skrevet 23. april 2007 Det sier seg egentlig selv. Du kan kun benytte noe som kan sammenlignes med hverandre som key (siden den, som navnet tilsier, skal sorteres). Lenke til kommentar
HDSoftware Skrevet 23. april 2007 Forfatter Del Skrevet 23. april 2007 Regnet jo med at det måtte være noe slik, men trodda kansje sammenligningen ville bli gjort på detaljnivå. Gikk vekk fra objekt og brukte streng i stedet. Funker som bare det. Takker for svar. Lenke til kommentar
j000rn Skrevet 23. april 2007 Del Skrevet 23. april 2007 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
HDSoftware Skrevet 23. april 2007 Forfatter Del Skrevet 23. april 2007 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
j000rn Skrevet 23. april 2007 Del Skrevet 23. april 2007 Og hvis du bruker en klasse som du ikke har lagd selv, kan du jo arve av denne + implementere IComparable. Hvis den ikke er sealed (noninheritable i vb.net?)... Men da kan du jo alltids lage en enkel wrapper klasse Lenke til kommentar
HDSoftware Skrevet 23. april 2007 Forfatter Del Skrevet 23. april 2007 HAHA!! Sykt!! Public class FakturaClass Inherits wndFakturahode Implements IComparable End Class Dim Fakturaliste as sortedlist(of FakturaClass, wndFakturalinjer) Noe sånt (litt på spissen kansje) ;-) .NET er sykt bra! Sånn er det bare Lenke til kommentar
j000rn Skrevet 23. april 2007 Del Skrevet 23. april 2007 (endret) 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 23. april 2007 av jorn79 Lenke til kommentar
HDSoftware Skrevet 23. april 2007 Forfatter Del Skrevet 23. april 2007 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 Vel, nytter ikke gråte over spillt melk...... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå