Zitat von
sakura:
Zitat von
sakura:
Zitat von
Christian S.:
Macht SetLength nicht dasselbe?
Oder gibt es das unter WinForms nicht mehr? (Habe D8 gerade nicht drauf.)
Ja, tut es...
Doch nicht ganz
SetLength erstellt den neu reservierten Bereich für multidimensionale Arrays nicht unbedingt in einem gesamten Speicherbereich zur Verfügung. Ausserdem ist der Overhead bei SetLength um einiges größer als bei New
...
...
SetLength wird, wie das von dir entdeckte New, nix anderes machen können als Array.CreatInstance aufzurufen.
Warum also nicht gleich so, damit hat man wesentlich mehr Kontrolle über den Array (zum Bleistift kann man auch die LowerBounds definieren.
Code:
byte[,] Miep;
Miep = Array.CreateInstance(typeof(byte)
// Längen
, new int[2] { 15, 44 }
// Startpunkte
, new int[2] { 20, 40 } ) as byte[,];
for (int i = 0; i < Miep.Rank; i++)
{
Console.WriteLine("Dimension {0} geht von {1} bis {2}"
, i + 1
, Miep.GetLowerBound(i)
, Miep.GetUpperBound(i));
}
Console.WriteLine("Bitte zum Beenden den Any-Key suchen... :P");
Console.ReadLine();
Code:
Dimension 1 geht von 20 bis 34
Dimension 2 geht von 40 bis 83
Bitte zum Beenden den Any-Key suchen... :P
Eine Instanz eines Arrays in der CLR hat
IMHO eine statische Länge (wenn Herr Hejlsberg das sagt glaube ich das auch
).
Da deshalb sowieso immer eine neue Instanz erzeugt werden muss, kann ich mir nichts vorstellen warum setLength langsamer sein sollte. (Würde mich aber brennend interessieren
)