Laden...

List<T> statt ArrayList?

Erstellt von gelöschtem Konto vor 15 Jahren Letzter Beitrag vor 15 Jahren 5.830 Views
Gelöschter Account
vor 15 Jahren
List<T> statt ArrayList?

[EDIT=herbivore]Abgeteilt von Dictionary<int, int> in Dictionary<int, ArrayList> konvertieren[EDIT]

Seit .Net 2.0 verwendet man keine Arraylist mehr, da es nun die generische Liste 'List<T>' gibt. Die generische 'List<T>' bietet nicht nur performancevorteile, sondern auch typsicherheit. Bitte schau mal in der MSDN nach 'List<T>' um ein beispiel und dessen verwendung zu finden. Man macht sich auch beim Programmieren das leben leichter wenn man die 'List<T>' verwendet.

_
62 Beiträge seit 2008
vor 15 Jahren

An JAck30lena hätte ich da noch eine Frage, du behauptest das ArrayListen in .NET 2.0 nicht mehr verwendet werden müssten/sollten!? Was ist aber wenn ich eine Datenstruktur benötige, die beliebige Objekte annehmen soll?

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo qwer,

das sollte zum einen sehr selten vorkommen und zum anderen kannst und solltest du dann List <Object> verwenden.

herbivore

_
62 Beiträge seit 2008
vor 15 Jahren

mit welcher Begründung sollte die Verwendung von beliebigen Objekte in einer ArrayList selten Vorkommen? Ich habe beruflich seid knapp einem Jahr mit .NET zutun und in Projekten kam dies ziemlich häufig vor, weil es sich eben manchmal nicht vermeiden lässt!

Gelöschter Account
vor 15 Jahren

es lässt sich so gut wie immer vermeiden.

typsicherheit wird in c# groß geschrieben. wenn der designer aber der meinung ist, das man im allgemeinen auch gut mit object arbeiten kann, dann sollte man ihn austauschen.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo qwer,

in Projekten kam dies ziemlich häufig vor

das ist dann leider ein Indiz, dass du beim Design was falsch machst.

weil es sich eben manchmal nicht vermeiden lässt!

Ich sehe es wie JAck30lena. Das lässt sich (fast) immer vermeiden und man sollte das auch tun.

Schreib mal, in welchen Fällen du das benötigt hast. Dann können wir sicher Alternativen aufzeigen.

herbivore

_
62 Beiträge seit 2008
vor 15 Jahren

wenn der designer aber der meinung ist, das man im allgemeinen auch gut mit object arbeiten kann, dann sollte man ihn austauschen.

gewagte Worte, und ein wenig unverschämt. aber lassen wir das mal so stehen!

typsicherheit wird in c# groß geschrieben

wieso? Hintergründe würden mich interessieren.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo qwer,

gewagte Worte, und ein wenig unverschämt.

Da muss ich dir recht geben.

typsicherheit wird in c# groß geschrieben
wieso? Hintergründe würden mich interessieren.

Typsicherheit vermeidet Laufzeitfehler, weil die Fehlerquellen schon zur Compilezeit geprüft werden (statt eben erst zur Laufzeit). Das sollte nun aber, sorry, wirklich bekannt bzw. offensichtlich sein.

herbivore

Gelöschter Account
vor 15 Jahren

gewagte Worte, und ein wenig unverschämt

provozierend. soll zum nachdenken anregen. -> aufgabe erfüllt.

wenn du bereits zur compilezeit sicherstellen kannst, das du mit den richtigen objekten arbeitest, kannst du schwierig zu findende fehler oder grobes fehlverhalten der software von vornerein ausschließen.

es ist auch eine performancefrage. casten kostet zeit.

  1. weniger fehler
  2. bessere performance
  3. schnelleres programmieren, da man die ganzen casts nciht braucht
  4. im sinne der oop
_
62 Beiträge seit 2008
vor 15 Jahren

provozierend. soll zum nachdenken anregen. -> aufgabe erfüllt.

zum einen ist das nicht gerade die freundlich art und weise gegenüber seinen mitmenschen und zum anderen trugt deine arrogante äußerung nicht zur beseitigung des problems bei! in foren geht leider immer wieder der gegenseitige respekt voreinander verloren. aber ich denke das müssen wir jetzt nicht weiter ausdiskutieren...

trotzdem danke für die aufklärung bzgl. typsicherheit in dyn. datenstrukturen. man kann halt nicht alles wissen und lernt immer wieder dazu!

0
767 Beiträge seit 2005
vor 15 Jahren

typsicherheit wird in c# groß geschrieben.

aber offenbar nicht in diesem Satz ... (SCNR)

loop:
btst #6,$bfe001
bne.s loop
rts

Gelöschter Account
vor 15 Jahren

mal ehrlich. ein softwaredesigner für c#, der nichts von typsicherheit hält oder weiß, ist fehl am platz.

das ist genauso, wie wenn ich einen azubi zum projektleiter mache. irgenwie wird es schon gehen aber was ordendliches kommt vermutlich nciht dabei heraus und eine software, die grobe desingfehler enthält, steht immer auf äußerst unsicheren boden. eben das soll aber der designer verhindern können. somit hat er seine aufgabe verfehlt.

ja gut ich hätte es schöner verpacken können. evtl. subtil am rande erwähnen... aber ich habe mich auf grund der wichtigkeit dieses c#-features dagegen entschieden.

man muss im übrigen nciht jedes geschriebene wort auf die goldwage legen. meine meinung ist und bleibt wie beschrieben. wenn du anders darüber denkst, ist das dein gutes recht und das respektiere ich auch. gründe für meine meinung kennst du nun auch.

als punkt 5 der mir nohc als pro einfällt, ist die gute unterstützung durch die intellisence und damit ein schnelleres entwickeln und noch eine vermeidung von fehlerquellen aber das setzt vorraus das man eine ide verwendet, die dies auch unterstützt. daher ist das nur bedingt ein vorteil.

@0815Coder
das ist mein stil. wie du sehen kannst, schreibe ich prinzipiell alles klein(mit wenigen ausnahmen), da ich persönlich großschreibung für sinnlos halte. -> soll jetzt aber zu keiner disskusion führen bitte.

0
767 Beiträge seit 2005
vor 15 Jahren

war auch keineswegs böse gemeint. ich schreib auch oft in dem stil. aber es hat so schön zum satz gepasst.

loop:
btst #6,$bfe001
bne.s loop
rts

1.665 Beiträge seit 2006
vor 15 Jahren

@0815Coder
das ist mein stil. wie du sehen kannst, schreibe ich prinzipiell alles klein(mit wenigen ausnahmen), da ich persönlich großschreibung für sinnlos halte.

Dazu hatten wir mal eine Diskussion in irgendeinem Thread..
Ich beiß mir immer noch die Zähne aus, wenn ich deine Posts lese, da ich immer genauer hinschaun muss und evtl. den Satz sogar nochmals lesen muss 🙂

@qwer:
Zur Diskussionsfrage bezüglich ArrayList, List of Objects ließe sich nicht vermeiden..
auch meiner Meinung nach Designfehler. Wenn man eine Aufzählung von Objekten hat, hat das meist einen Grund: Sie haben irgendwie miteinander was zu tun.

Also -> gemeinsames Interface, gemeinsame Basisklasse. Dann ist das Thema auch erledigt!
Ich hoffe, vllt. kannst du mit deiner Meinung jetzt ein wenig einlenken und das überdenken.

0
767 Beiträge seit 2005
vor 15 Jahren

Ich glaub auch, dass sich das in den meisten Fällen vermeiden läßt. Allerdings würde ich in den wenigen Ausnahmen immer noch eine List<object> der ArrayList vorziehen. Damit ist schon mal dokumentiert, dass man wirklich objects meint die nichts miteinander zu tun haben...

loop:
btst #6,$bfe001
bne.s loop
rts

_
62 Beiträge seit 2008
vor 15 Jahren

ok, ich lasse mich ja gerne eines besseren belehren.
wollen wir mal sehn wie sich folgende situation realisieren lässt...

datenbank-szenario:
wir haben mehrere stored procedures die im wesentlichen datensätz in eine bestimmte tabelle schreiben. hierfür könnte man eine dynamische funktion implementieren, die für die ausführung der jeweiligen stored procudure verantwortlich ist,
z.b callSP(string procedure_name, dictionary<string, object> params_for_procedure)

params_for_procedure enthält die nötigen eingangsparameter der strored procedure, also den zu schreibenden datensatz. der schlüssel des dictionarys enthält den parametername und der wert des dictionarys enthält den zu schreibenden wert. der wert kann natürlich von beliebigem typ sein, je nach dem welche spalte ich in meiner tabelle befüllen will.

z.b. soll eine tabelle adresse befüllt werden, als spalten gibt es PLZ vom typ int und Anschrift vom typ string.

Gelöschter Account
vor 15 Jahren

in diesem fall würde ich trotzdem lieber eine SqlParameter[] als übergabetyp nehmen oder wenn du es allgemein halten willst dann eine DbParameter[]

oder gleich eine SqlParameterCollection bzw DbParameterCollection

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo qwer,

natürlich gibt es Fällen, bei denen man beliebige Parameter übergeben können will, z.B. bei Control.Invoke oder MethodInfo.Invoke. In die gleiche Reihe fällt dein Beispiel. Das ändert aber nichts daran, dass solche Fälle selten sind. Schon weil die Typsicherheit dabei verloren geht (bzw. auf Laufzeitprüfungen verlagert wird), sollte man solche Konstruktionen möglichst vermeiden.

StoredProcedures liegen sowieso quer zur Objektorientierung und sind insofern ein schlechtes Beispiel. Die Lösung würde hier m.E. darin liegen, auf StoredProcedures zu verzichten. Und wenn man sie doch braucht, sie zumindest nicht (direkt) aus dem Programm heraus aufzurufen (sondern einen Wrapper zu bauen).

Für Dictioanry <T, Object> sollte der gleiche Rat gelten wie für List<Object>. Beides sollte man nach Möglichkeit vermeiden.

herbivore

_
62 Beiträge seit 2008
vor 15 Jahren

alles klar, danke für die tipps!

J
3.331 Beiträge seit 2006
vor 15 Jahren

als spalten gibt es PLZ vom typ int Randbemerkung: Das ist grundsätzlich fehlerhaft. Zu Leipzig gehört eine PLZ "04105", aber nicht die PLZ 4105. Die deutschen PLZ sind also Strings der festen Länge 5.

Auch international sind PLZ als Strings zu verarbeiten, z.B. GB "14A BC3" oder USA mit "12345-6789".

Gruß Jürgen

_
62 Beiträge seit 2008
vor 15 Jahren

das sollte ja auch nur ein beispiel sein...