Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
List<T> statt ArrayList?
Gelöschter Benutzer

List<T> statt ArrayList?

beantworten | zitieren | melden

[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.
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von _qwer_ am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo _qwer_,

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

herbivore
private Nachricht | Beiträge des Benutzers
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo _qwer_,
Zitat
in Projekten kam dies ziemlich häufig vor
das ist dann leider ein Indiz, dass du beim Design was falsch machst.
Zitat
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
private Nachricht | Beiträge des Benutzers
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

Zitat
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!
Zitat
typsicherheit wird in c# groß geschrieben
wieso? Hintergründe würden mich interessieren.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo _qwer_,
Zitat
gewagte Worte, und ein wenig unverschämt.
Da muss ich dir recht geben.
Zitat
Zitat
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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
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
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

Zitat
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!
private Nachricht | Beiträge des Benutzers
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

Zitat
typsicherheit wird in c# groß geschrieben.

aber offenbar nicht in diesem Satz ... (SCNR)
loop:
btst #6,$bfe001
bne.s loop
rts
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
JunkyXL
myCSharp.de - Experte

Avatar #avatar-3234.gif


Dabei seit:
Beiträge: 1732
Herkunft: Ein paar Bytes südlich von string

beantworten | zitieren | melden

Zitat von JAck30lena
@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.
private Nachricht | Beiträge des Benutzers
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von _qwer_ am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal am .
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

alles klar, danke für die tipps!
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3358
Herkunft: Berlin

beantworten | zitieren | melden

Zitat von _qwer_
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
private Nachricht | Beiträge des Benutzers
_qwer_
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

das sollte ja auch nur ein beispiel sein...
private Nachricht | Beiträge des Benutzers