Wie konvertieren von ArrayList in ein array der Struktur?
Hier habe ich:
Public Structure MyStruct
Public Name as String
Public Content as String
End Structure
Dim oStruct as MyStruct = New MyStruct()
oStruct.Name = ...
oStruct.Content = ...
Dim alList as ArrayList = new ArrayList()
alList.Add(oStruct)
Ich umwandeln möchte die ArrayList an eine statisch stark typisierte Arrays vom Typ MyStruct. Wie kann ich das tun? Ich hatte kein Glück mit ToArray.
Ich bin mit .NET Framework 2.0.
- Ich kann nicht machen Sie - aber bitte beachten Sie, wie viel MyStruct sollte eine Klasse sein, nicht eine Struktur. Dieser neigt dazu, eine Menge Verwirrung, besonders für veränderliche Typen (wie bei Euch).
- MyStruct hätte eine Klasse, doch da es keine Methode, ich nehme an, es ist schneller, einfach ein struct?!
- Nein, das ist nicht der Unterschied zwischen structs und Klassen. Structs können Methoden in .NET; der Unterschied ist der Referenz-Typ vs-Wert-Typ.
- So würden Sie vorschlagen, um eine Klasse verwenden, auch wenn ich nur zwei Felder?
- JA! Bitte nicht.
- Absolut. Verschiedene Beschreibungen der Unterschied zwischen struct und Klasse im überfluss - hier ist nur eines: pobox.com/~skeet/csharp/parameters.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon aus, dass, da Sie mit ArrayList, Sie sind mit 1.1?
In dem Fall, ich vermute Folgendes funktionieren würde:
(Bearbeiten - Bill ' s ToArray Nutzung ist bequemer - ich wusste nicht, über, dass man, aber dann habe ich sehr selten [wenn überhaupt] verwenden ArrayList)
Jedoch, wenn MyStruct ist wirklich ein struct ist, dann kann ich nicht sagen, stark genug, dass mutable structs sind eine schlechte Idee - also dort, wo Sie festlegen können .Name und .Inhalte nach der Erstellung. Strukturen sollte man fast immer unveränderlich. In Wirklichkeit, Ihre MyStruct aussieht, es sollte eine Klasse sein. Auch ich bin nicht "up" auf VB, aber sind Sie auch öffentliche Felder? Wieder - nicht empfehlenswert - Eigenschaften vorzuziehen wäre. Ich weiß nicht, wie VB, C# 3.0 hat einige sehr knappe syntax:
Wenn Sie 2.0 oder höher, betrachten Sie List<T> anstelle von ArrayList.
Müssen Sie gegossen das Ergebnis
ToArray
ToArray ist der richtige Weg zu gehen. In C# wäre es:
Sind Sie stecken mit 1.1, btw? Wenn Sie 2.0 verwenden, können Sie shift List<T> statt?
Dieser arbeitete für mich
Wenn Sie mit Visual Studio 2008 können Sie ein List-Objekt.
Falls Sie mit 2.0 oder höher, möchten Sie vielleicht, um zu definieren, die arraylist wie diese:
Dadurch erhalten Sie die gleiche Semantik wie ein array (Suche nach index, starke Typisierung, IEnumerable-support, etc).
Gibt es nur zwei Gründe .Net 2.0 und höher um ein array zu verwenden, anstatt eine generische Liste:
IEnumerable<T>, IList<T>, or ICollection<T>
, und nur selten ein array.Schließlich ist diese Art von nit-wählerisch, aber es gibt zwei stilistische Punkte, die ich ansprechen möchte in den code geschrieben. Beachten Sie zunächst, die abgekürzte syntax, die ich verwendet, um zu erstellen, die
New List<MyStruct>
. Es gibt kein symbol = und Sie nicht haben, um den Typ Namen zweimal. Das war Unterstützung wieder in 1.1 als auch, so gibt es keine Entschuldigung gibt. Zweitens, die Stil-Richtlinien für .Net von Microsoft veröffentlicht auf der MSDN-Website (siehe die Allgemeinen Namenskonventionen Abschnitt) ausdrücklich empfohlen, vor der ungarischen Warzen wie 'o' oder 'a'. Es war schön für VB6/VBScript, die waren lose typisiert, aber .Net stark typisiert, so dass die Warzen, gut, Warze-hässlich.