Entwickler-Ecke

Basistechnologien - Dynamische arrays in C#


JayK - Do 04.08.05 15:41
Titel: Dynamische arrays in C#
Hallo,

wie deklariert man in C# ein dynamisches array ud wie geht man damit um (Länge setzen, etc. ...)
Hab schon gegoogelt und hier im Forum gesucht aber nix gefunden.

Schonmal Danke im vorraus,
JayK


Moderiert von user profile iconraziel: Topic aus .NET verschoben am Sa 17.09.2005 um 22:09


AndyB - Do 04.08.05 16:34

C# kennt keine dynamischen Arrays, so wie Delphi.NET. Da musst du wohl mit ArrayList und vielen Typecasts dich durchmogeln, dann das Array ist in C# in dem Sinne statisch als dass man die Größe nach dem (dynamischen) Erstellen nicht verändern kann, ohne ein neues Array anzulegen, die Daten zu kopieren und das neue Array zu nutzen.


C#-Quelltext
1:
2:
3:
4:
5:
MyObj[] myArray = new MyObj[10];
// ...
MyObj[] temp = new MyObj[11];
myArray.CopyTo(temp, 0);
myArray = temp;



Für irgendwas muss ja Delphi.NET gut sein

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  MyArray: array of MyObj;
begin
  SetLength(MyArray, 10);
  // ...
  SetLength(MyArray, 11);
end;


Moderiert von user profile iconraziel: Code- durch C#-Tags ersetzt


Speedmaster - Mi 10.08.05 18:15

Natürlich sind Dynamische Arrays möglich, auch wenn sie keine normalen Arrays mehr sind sondern Collections.
Dazu einfach System.Collections einbinden. Unter Spezialized gibt es ein paar Vorgaben, um eigene zu erstellen benutzt du System.Collections.CollectionBase.
Ein Beispiel gibts dazu auf MSDN, und wenn du #develop hast kannst du es sogar automatisch erzeugen lassen!


Marauder - Do 18.08.05 11:29

Dynamische arrays können auch in c# mit new erzeugt werden:



C#-Quelltext
1:
2:
int[] myIntArray
myIntArray = new int[5] { 12345 };


auf die art in etwa..

Moderiert von user profile iconChristian S.: Code-Tags hinzugefügt.
Moderiert von user profile iconraziel: Code- durch C#-Tags ersetzt


Motzi - Do 18.08.05 12:01

@Marauder: das ist schon klar - so gesehen gibt es in C# eigentlich nur dynamische Arrays. ABER, wie änderst du zur Laufzeit die Länge dieses Arrays, ohne den Inhalt zu löschen?


Marauder - Do 18.08.05 18:07

ja, da hast du recht, motzi, so richtig dynamische arrays gehen nur über die klasse arraylist
und damit über collections...

bäh... diese primitiven hochsprachen... :wink: drum mach ich delphi...


UC-Chewie - Do 18.08.05 18:14

user profile iconMarauder hat folgendes geschrieben:
bäh... diese primitiven hochsprachen... :wink: drum mach ich delphi...


Oh ja, ich setz lieber jedesmal die Länge manuell hoch, als eine Klasse zu verwenden, die dies transparent, automatisch und bei Bedarf tut :roll:


Marauder - Do 18.08.05 22:01

@UC-Chewie:

Mein letzter Post war etwas Sarkasmus gepaart mit einer Prise Ironie...

Nimm das doch nicht so ernst :wink:


UC-Chewie - Fr 19.08.05 09:27

user profile iconMarauder hat folgendes geschrieben:
@UC-Chewie:

Mein letzter Post war etwas Sarkasmus gepaart mit einer Prise Ironie...

Nimm das doch nicht so ernst :wink:


Das hoffe ich doch. Aber nicht wenige hier im Forum denken wirklich so :roll:


Marauder - Fr 19.08.05 10:35

Tja... lass Ihnen ein wenig Zeit :wink: Sie sind halt noch jung...


Robert_G - Di 27.09.05 12:40

user profile iconAndyB hat folgendes geschrieben:
C# kennt keine dynamischen Arrays, so wie Delphi.NET. Da musst du wohl mit ArrayList und vielen Typecasts dich durchmogeln, dann das Array ist in C# in dem Sinne statisch als dass man die Größe nach dem (dynamischen) Erstellen nicht verändern kann, ohne ein neues Array anzulegen, die Daten zu kopieren und das neue Array zu nutzen.
...
Für irgendwas muss ja Delphi.NET gut sein
Dann kannst du mir sicher auch erklären, wie D.Net das machen will ohne den Array zu kopieren? :gruebel:
Ich konter da glatt mit "Why SetLength is evil? [http://blogs.remobjects.com/blogs/mh/?p=65&more=1&c=1&tb=1&pb=1]" :P


Robert_G - Mo 03.10.05 17:24

Öhm... darf ich mal anmerken, dass der Thread trotz mehrerer Lösungsvorschläge[1] immer noch als offene Frage in der Liste steht? :angel:

[1]welche aus Containerklassen oder einem schlichten Nein bestehen


JayK - Mo 03.10.05 22:35

Sorry, ich hatte den Thread vergessen, weil ich das Projekt, wo ich das gebraucht hätte, verworfen habe. ;-)