kakebake Skrevet 14. september 2011 Skrevet 14. september 2011 Hei, jeg er student og nettopp begynt med c# trenger derfor litt hjelp med en oppgave jeg jobber med. Jeg skal lage en Struct, som skal inneholde properties for 4 variabler som skal være koordinater og navn ( int x, y, z, String label). Også skal jeg ha en egen klasse som skal inneholde ett array av disse objektene fra Structen. Alt har gått bra men i ToString metoden min skal jeg skrive ut det som er i arrayet, siden arrayet mitt er større enn antall obj jeg har skriver den ut de tomme plassene også, legger ved relevant kode: //ToString metode for Punkt public override String ToString() { String report = X + " " + Y + " " + Z + " " + LABEL + "\n"; return report; } Minepunkter klassen: public override String ToString() { StringBuilder r = new StringBuilder(); for (int i = 0; i < punktTabell.Length; i++) { r.Append(punktTabell.ToString()); } return Convert.ToString®; } Det som skal komme ut etter å ha kjørt main metoden: (x, y, z, "label") Men det som kommer er (x, y, z, "label") 0 0 0 0 0 0 0 0 0 osv for alle tomme plasser. Jeg skjønner at problemet mitt ligger i det at jeg skriver ut fra ToStringen til til Punkt. noen som vet hvordan jeg skal stoppe utskrift for tomme array slots?
GeirGrusom Skrevet 14. september 2011 Skrevet 14. september 2011 Du må sjekke om de er tomme. Eksempelvis slik: struct Punkt { public int X, Y, Z; public string Label { get; set; } public bool IsEmpty() { return Label == null; } public Punkt(int x, int y, int z, string label) { Label = label ?? string.Empty; this.X = x; this.Y = y; this.Z = z; } public Punkt(int x, int y, int z) this : (x, y, z, string.Empty) { } } Denne gjør antagelsen om at dersom en har brukt constructoren, så er ikke cellen tom. For å da sette en celle tom, setter du den lik default(Punkt). IsEmpty vil da returnere true for alle celler der Label er null, dvs celler der constructoren aldri er kalt.
MailMan13 Skrevet 14. september 2011 Skrevet 14. september 2011 Evt. lage arrayet av Nullable-punkter...
GeirGrusom Skrevet 14. september 2011 Skrevet 14. september 2011 Da kan du likegodt bytte til class istedet for nullable.
MailMan13 Skrevet 14. september 2011 Skrevet 14. september 2011 (endret) Nei, det er ikke helt det samme. En klasse blir en reference type, en Nullable er en struct med et "HasValue"-flagg under panseret og litt kompilator-magi for å få det til å oppføre seg pent med null-keywordet. Endret 14. september 2011 av MailMan13
kakebake Skrevet 27. september 2011 Forfatter Skrevet 27. september 2011 Takk for hjelpen, fikk ordnet problemene
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å