Entwickler-Ecke

Basistechnologien - Array dynamisch erweitern?


csharpMorpheus - Fr 18.12.09 11:06
Titel: Array dynamisch erweitern?
Hallo allesamt.

Ich möchte eine Array auf UNBESTIMMTEN Index hin initialisieren.
Das heißt, ich möchte keine "feste" Anzahl an möglichen Einträgen haben.
Bsp.:

C#-Quelltext
1:
string strArr[3];                    


In php kann ich eine Array befüllen wie ich will bzw. mit so vielen Einträgen
wie mir lieb ist ohne vorher eine feste Anzahl angeben zu müssen.
PHP:

Quelltext
1:
myArr[] = "Irgendwas"                    


Geht das in C# auch?

Danke


Christian S. - Fr 18.12.09 11:21

Hallo!

Wenn Du sowas machen willst, nimmt man eher eine List<T> also z.B. List<string>. Die hat dann eine Add-Methode. Arrays haben eine konstante Größe und müssten zur Erweiterung komplettt kopiert werden.

Grüße
Christian


JüTho - Fr 18.12.09 14:25

Hallo,

wenn es unbedingt sein muss, geht es mit Array.Copy oder Array.CopyTo. Das ist aber wirklich (wie Christian schon sagte) nur im Ausnahmefällen ein sinnvolles Verfahren. Besser ist in aller Regel List<T>; das hat die Verfahren zur Änderung bereits eingebaut.

Jürgen


csharpMorpheus - Mo 21.12.09 14:27

Super. Danke.
Das ist genau das, was ich suchte.

Gibt es denn eine Möglichkeit, solch eine Liste, z.B. definiert als <string> zum schluss hin
vollständig zu konvertieren, sodass die array z.B. nun ein "ColumnSet" ist um sie als solches übergeben zu können?
Sonst würde ich ja den Compilerfehler "Implizite Konvertierung ..." bekommen!

Habt Ihr da noch nen kleinen Tipp für mich?

Dankeschön :-)


JüTho - Mo 21.12.09 14:40

Was verstehst du unter einem "ColumnSet"? Wenn es eine DataColumnCollection sein soll, ist es unmöglich, weil zu jeder DataColumn nicht nur der Name der Spalte gehört, sondern weitere Informationen (vor allem Datentyp). Wenn es irgendein String-Array sein soll, geht es mit List<T>.ToArray (was für eine Überraschung, dass es so eine Methode gibt).

Jürgen


csharpMorpheus - Mo 21.12.09 14:53

Die Funktion, welche die Liste erwartet ist in ColumnSetBase deklariert und so muss ich es auch übergeben.
Jedoch gibt es wie erwähnt keine ColumnSet.Add-Methode, daher wollte ich es mit "List" machen.
Doch dann kann ich die List nicht in ein ColumnSetBase konvertieren.

Dazu müsste man eine eigene Funktion schreiben, richtig?
Das wäre wohl die einzigste Möglichkeit ...

http://msdn.microsoft.com/en-us/library/aa680889.aspx


JüTho - Mo 21.12.09 18:00

Danke für den Link; jetzt weiß ich, worum es geht - um MS Dynamics CRM Service, also nichts, was zum NET-Standard gehört - und dass ich dazu nichts sagen kann. Jürgen


Kha - Mo 21.12.09 19:34

Die API sieht äußerst merkwürdig aus... aber egal, ist ColumnSet.Attributes denn nicht writeable :?!?: ?


csharpMorpheus - Di 22.12.09 11:02

Doch, sie ist writeable!
Sie hat jedoch keine Add oder Del Funktionen.
Ich kann Sie nur direkt füllen.

Und dazu brauche ich wiederum ein ColumnSet.
Dann ist es ja wieder das selbe.


Kha - Di 22.12.09 20:13

user profile iconcsharpMorpheus hat folgendes geschrieben Zum zitierten Posting springen:
Ich kann Sie nur direkt füllen.
Dann mach das doch.


C#-Quelltext
1:
columnSet.Attributes = list.ToArray();