Dynamischer Array von struct
-
Es soll ein Array einer Struktur dynamisch während der Laufzeit angelegt werden,
Die Struktur könnte so aussehen:public struct s { DateTime tx; int ix; double dx; }
Von dieser Struktur wird ein Array mit z.B. int elements = 100; benötigt.
Wie legt man einen solchen Array korrekt in C# dynamisch an und wie greift man dann auf die Elemente zu? Versucht habe ichs[] arr = new s[100]; // wird gemacht .... arr[0].ix = 0; // wird verweigert!
Und weiter brauche ich dann auch noch einen Sort auf entweder DateTime tx oder int ix. Ich bin da bei der Suche nicht richtig fündig geworden.
-
Das Erstellen des Arrays machst du richtig. Aber der Zugriff auf die Membervariable "ix" klappt nicht, weil sie private ist. In C# sind die Member von struct nicht automatisch public, wie das in C++ der Fall ist. (Das public vor dem struct sagt nur, dass die Struktur in der Assembly öffentlich ist und von anderen Assemblies gesehen wird)
Des Weiteren gibt es die Klasse Array, welche die Methode Sort - in mehreren Überladungen - anbietet. http://msdn.microsoft.com/en-us/library/bzw8611x.aspx
Hier solltest du fündig werden, was dein Sortierwunsch angeht.
Alternativ kannst du es auch mit LINQ machen, aber dann hast du eben ein IEnumerable, auf das du nur lesend zugreifen kannst.
-
Abgesehen von den Hinweisen von GPC kann ich dir nur empfehlen einmal die Antworten zum Thema Why are mutable structs evil zu lesen. Man sollte sehr genau wissen warum man in C# eine struct benutzt, die Unterschiede sind wesentlich größer als in C++.
-
O.k. - verstanden! Ich muss mich konsequenter von alten Gewohnheiten in C oder C++ trennen und darf nichts einfach unbedenklich übernehmen. Besser struct nur für einfache kleine Dinge einsetzen. Will man mehr, fertige Klassen verwenden oder solche selbst entwickeln.
-
berniebutt schrieb:
Ich muss mich konsequenter von alten Gewohnheiten in C oder C++ trennen und darf nichts einfach unbedenklich übernehmen.
So ist es. Es gibt eine Reihe von Dingen, die man in C# besser NICHT mehr macht, wenn man von C++ kommt. Ich habe diesen Lernprozess auch durchmachen müssen
http://msdn.microsoft.com/en-us/magazine/cc301520.aspx
http://msdn.microsoft.com/en-us/library/yyaad03b(v=vs.90).aspx
http://windowsdevcenter.com/pub/a/dotnet/2002/02/11/csharp_traps.htmlBesser struct nur für einfache kleine Dinge einsetzen. Will man mehr, fertige Klassen verwenden oder solche selbst entwickeln.
Wie KPC schon sagte, ist das vielleicht wichtigste im Zusammenhang mit structs: Nimm sie nur selten und wenn, dann mach sie immutable. Für deine konkrete Anforderung wäre class besser.
@KPC cooler Nick