Entwickler-Ecke
Basistechnologien - Wann Array Kopieren und wann die referenz ?
Nuckey - So 22.05.11 12:02
Titel: Wann Array Kopieren und wann die referenz ?
folgendes beispiel:
in einer klasse (ohne C vorne) ,habe ich ein string array
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public class Dings { public string[]; }
Dingens test = new Dingens();
test = string.Split(................... |
folgende grundbedingung : die grösse vom array (value) kann variable sein von 1 - ......
hier wäre (so sagt mein bauchgefühl) die zuweisung per = sinnvoll lieg ich doch richtig ?
weiteres beispiel.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| public class AnderesDingens { string[] entrys = new string[4]{"0","0","0","0"};
public string Type { get { return this.objectid; } set { this.objectid = value; } }
public string[] Entrys { get { return this.entrys; } set { if (value.Length >= 4) Array.Copy(value, entrys, 4); else value.CopyTo(entrys, 0); } }
public string entry0 { get { return this.entrys[0]; } set { this.entrys[0] = value; } }
public string entry1 { get { return this.entrys[1]; } set { this.entrys[1] = value; } }
public string entry2 { get { return this.entrys[2]; } set { this.entrys[2] = value; } }
public string entry3 { get { return this.entrys[3]; } set { this.entrys[3] = value; } } } |
hier ist die arraygrösse festgelegt auf 4 und initialiesiert mit {"0","0","0","0"}.
hier ist die grundbedingung das die Arraygrösse nicht grösser oder kleiner werden darf als 4.
da aber es durch aus passieren kann das ,das neue array variable ist,bin ich zum schluss gekommen das es das beste wäre zu kopieren und es wäre resourcenverschwendung wenn das schon vorhandende array entrys entfernt werden würde.
ist diese annahme richtig oder gibt es noch einen anderen weg ?
mfg nuckey
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Trashkid2000 - So 22.05.11 14:57
Hallo,
also so richtig verstehe ich nicht, was Du erreichen willst.
Nuckey hat folgendes geschrieben : |
hier ist die arraygrösse festgelegt auf 4 und initialiesiert mit {"0","0","0","0"}.
hier ist die grundbedingung das die Arraygrösse nicht grösser oder kleiner werden darf als 4. |
Wodurch soll das eine Bedingung sein? Ich kann doch ein Array mit beliebig vielen Elementen übergeben. Wenn Du mit dem Copy nur die ersten 4 übernimmst, ist das eine andere Sache. Und nicht sauber! Wenn Du erreichen willst, dass exakt 4 strings übergeben werden, wäre es besser, Du würdest Dir eine Klasse machen, die die 4 Strings als Properties hat, und Du nur noch ein Objekt davon setzen kannst bzw. zurücklieferst.
Und die Properties "entry0" bis "entry3" finde ich ziemlich sinnlos.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public class AnderesDingens { private Entrys entrys = new Entrys() { Entry0 = "0", Entry1 = "0", Entry2 = "0", Entry3 = "0" }; public Entrys Entrys { get { return entrys; } set { entrys = value; } } }
public class Entrys { public string Entry0 { get; set; } public string Entry1 { get; set; } public string Entry2 { get; set; } public string Entry3 { get; set; } } |
LG
Nuckey - So 22.05.11 18:26
ja an sich schon wenn die string split(....),der string array je nach inhalt ,eine variable arraygrösse gaben kann
aber manchmal ich nur eine bestimmte grösse übernehmen kann und darf.
wo es nicht drauf ankommt setze ich entrys = string.Split() ,aber eben halt nicht immer ,da müssen manchmal die ersten 4 oder 5 einträge übernommen werden ohne das die ref. von entry überschrieben werden darf.
und so bin ich unsicher ,welcher nun der eff. weg ist.
mfg nuckey
Ralf Jansen - So 22.05.11 19:23
| Zitat: |
| ohne das die ref. von entry überschrieben werden darf. |
Weil? Gefühlt scheinst du ein Konzept entsprechend irgendeiner anderen Sprachen umsetzen zu wollen das hier aber nicht passt.
Nuckey - Mi 25.05.11 04:17
@ ralf jansen,komme aus der c/c++ ecke bin noch nicht vollständig mit dehn sonderheiten von c# vertraut.
mitlerweile prüfe ich auf die grösse des "ankommenden array´s" is diese gleich wird nur die ref. kopiert
ansonsten per kopie die festgelegten anzahl der daten aus diesem.
mfg nuckey
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!