Entwickler-Ecke
Basistechnologien - brauche hilfe mit Struct arrays
LordSimonXp - Sa 08.03.08 21:27
Titel: brauche hilfe mit Struct arrays
Hi Leute!
also ich habe Probleme mit Arraylists die mit Struct arbeiten.
dh:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| struct EnemyRecord { public int ABC; public char DEF; } EnemyRecord dingsEnemy = new EnemyRecord (); dingsEnemy.ABC = 34; |
das funktioniert aber ich möchte das ganze nun als dynamisches array - soll heissen ich möchte eine Anzahl X der "dingsEnemy" haben.
so habe ich es in Delphi gemacht:
Delphi-Quelltext
1:
| setlength(dingsEnemy,length(dingsEnemy)+1); |
nun kann ich
Delphi-Quelltext
1:
| dingsEnemy[length(dingsEnemy)-1].ABC |
benutzen(bzw dem ABC einen Wert zuschreiben).
kann mir bitte iener sagen wie ich meinen C# Code anpassen muss um es genau so machen zu können?
Dankeschön schonmal.
Moderiert von
Christian S.: Quote- durch C#-Tags ersetzt
Moderiert von
Christian S.: Delphi-Tags hinzugefügtModeriert von
Christian S.: Topic aus Allgemeine .NET-Fragen verschoben am Sa 08.03.2008 um 21:40
Christian S. - Sa 08.03.08 21:41
ArrayLists sind nicht typensicher und teilweise langsam, nutze stattdessen eine List<T>. Dann bekommst Du über myList.Count die Anzahl der Einträge.
LordSimonXp - Sa 08.03.08 21:57
ok von Listen hab ich schon mal was gehört aber da ist auch das gleiche problem wie bekomme ich da mein struct rein??
hast du vielleicht ein kleines Beispiel?
Christian S. - Sa 08.03.08 22:47
Ich hab nicht den Eindruck, dass Du Dir die Klasse mal in der Doku angesehen hast :? Da wäre Dir bestimmt die Add-Methode aufgefallen.
LordSimonXp - So 09.03.08 00:41
o doch doch hab mir die Sachen durchgeschaut und eine "einfache" Liste kann ich schon erstellen aber halt nur eine die entweder int, string... beinhaltet aber mir fehlt noch etwas also - ich würde das gerne so benutzen wie hier im beispiel aber ich kann es halt nicht (bin auch nicht so fit in C#)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| struct buildingsproperties { int X; int Y; String buildingtype; } public List buildings = new List();
public void add(String buildingtype, int X, int Y) { buildings.Add(buildingtype); buildings[buildings.length].X = X; buildings[buildings.length].Y = Y; } |
so in etwa würde ich das gerne benutzen wollen aber :|wie schon gesagt kA wie ich den struct damit verbinden kann
Christian S. - So 09.03.08 00:56
Zum einen: Benutz eine List<T> bzw. in diesem Fall eine List<buildingsproperties>. Eine List ist nicht das, was ich meinte ;)
Und ich fürchte, dadurch das ein Struct ein Wert- und kein Referenzdatentyp ist, wirst Du mittels buildings[buildings.length].X = X; nicht auf X drauf zugreifen können, sondern musst immer den kompletten Struct neu setzen.
LordSimonXp - So 09.03.08 11:47
:( das übersteigt nun völlig mein
Vorstellungsvermögen. Gibst den keine Möglichkeit das wie in Delphi gleich zu tuen?
Hab die msdn und google durchgesucht aber nirgends Beispiele gefunden :|
(wie schon gesagt mit delphi schaff ich sowas ganz leicht aber hier bei C# klappt es net)
könnte man den Code nicht irgendwie anpassen? Btw Performance spielt keine Rolle.
Christian S. - So 09.03.08 11:56
Du hast an dieser Stelle folgendes Problem:
Das hier:
C#-Quelltext
1:
| buildings[buildings.Count-1] |
ist in Wahrheit:
C#-Quelltext
1:
| buildings.Item[buildings.Count-1] |
ist in Wahrheit:
C#-Quelltext
1:
| buildings.get_Item(buildings.Count-1) |
Du machst also nichts weiteres, als eine Funktion aufzurufen. Da ein Struct aber - wie bei Delphi ein Record - kein Referenzdatentyp ist, gibt die Funktion
eine Kopie zurück. Und wenn Du da eine Eigenschaft änderst, hat das keinen Einfluss aufs Original.
Die einfachste Möglichkeit ist wohl, das Ganze mit einer Klasse statt einem Struct zu machen.
LordSimonXp - So 09.03.08 12:04
phu ok werde es in eine classe packen :P
danke für die Antwort
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!