Laden...

List<List<T>> ?

Erstellt von Sebo vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.384 Views
S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren
List<List<T>> ?

Hi.

habe folgendes problem:
Ich möchte eine Liste erstellen, die Listen enthält.


List<??> blubb = new List<??>();
blubb.Add(new List<Channel>());

geht das überhaupt? oder muss ich umschwenken?

1.371 Beiträge seit 2004
vor 17 Jahren

Ich kenne zwar List bisher garnicht, aber ich schätze mal, dass in der List Objekte vom Typ object abgelegt werden. Falls dies der Fall ist, sollte es gehen.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

N
4.644 Beiträge seit 2004
vor 17 Jahren
List<List<Channel>> mylist = new List<List<Channel>>();
564 Beiträge seit 2006
vor 17 Jahren

Hallo!

@Maddinel: Nein, das íst nicht so. List<T> ist eine generische Listenimplementierung. Der Vorteil der Generics (neu in .Net2.0) ist gerade der, das casten in object zu vermeiden.

@sebo: Habe es noch nicht ausprobiert, aber wenn es geht, dann so:

List<List<Channel>> test = new List<List<Channel>>();

der Marcel

EDIT: zu spät 🙂

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

Original von Noodles

List<List<Channel>> mylist = new List<List<Channel>>();  

so hab ich das auch gedacht und auch probiert:

The type or namespace name 'Channel' could not be found (are you missing a using directive or an assembly reference?)

klappt also leider nicht.

dies wiederum scheint zu funktionieren:


List<Object> groups = new List<Object>();
groups.Add(new List<RssChannel>());

sollte es tatsächlich klappen (bisher fehlerlose compilierung möglich), bedanke ich mich schon mal 😉

N
4.644 Beiträge seit 2004
vor 17 Jahren

Das klappt. Du musst halt nur den Namespace von Channel einbinden.

564 Beiträge seit 2006
vor 17 Jahren

Hallo sebo!

Das liegt aber nicht an der Liste, sondern dass an dieser Stelle in deinem Code der Typ Channel nicht bekannt ist!

der Marcel

EDIT: schon wieder 😁

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

wie binde ich denn den namespace ein? ^^

564 Beiträge seit 2006
vor 17 Jahren

Hi sebo!

Ist denn Channel eine Klasse von dir oder aus einer Framework-Bibliothek.
Namespaceeinbinden geht über Projektverweis und using-Direktive.

der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

channel ist eine von mir geschriebene Klasse.
mit deinen tips kann ich leider nur wenig anfangen 😉

564 Beiträge seit 2006
vor 17 Jahren

Hi!

Wo steht denn diese Klasse? auf jeden Fall in einem anderen namespace.
Das ist aber das normale Vorgehen: Assembly referenzieren und namespace evtl. per using einbinden (schau mal im VS --> dein Projekt --> Verweise nach, kannst du mit Menü Projekt --> Verweis hinzufügen hinzufügen, für ein beispiel der using-Direktive: das VS fügt einige usings automatisch am Dateianfang ein)

der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

nein. die sind alle im gleichen namespace. (grad nachgeschaut)
eine andere klasse ist in einem anderen paket
Freeder.Rss --> Freeder.Gui

in der Gui habe ich den namespace Rss via using eingebunden. da hats natürlich ohne nicht geklappt.

564 Beiträge seit 2006
vor 17 Jahren

Hi sebo!

The type or namespace name 'Channel' could not be found (are you missing a using directive or an assembly reference?)

Die fehlermeldung sagt aber was anderes. Der namespace von Channel (evtl. Schreibfehler? Groß/Klein?)ist nicht greifbar.


List<Object> groups = new List<Object>();
groups.Add(new List<RssChannel>());

Damit machst du den Vorteil von Generics kaputt. Der ist eben, gerade nicht in object zu casten! 😉

der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

S
Sebo Themenstarter:in
50 Beiträge seit 2006
vor 17 Jahren

nein wie blöd... hab das nu offensichtlich in allen versuchen falsch gemacht.
Das ding heisst RssChannel und nicht Channel ...

damit wäre das geklärt.
wenn du mir jetzt noch sagst, warum das so ein vorteil ist, nicht in object casten zu müssen, bin ich dir richtig dankbar (nicht, dass ich es nicht so auch schon wäre...)

D
462 Beiträge seit 2005
vor 17 Jahren

Der Vorteil an Generics ist die Typ-Sicherheit. D.h. du kannst in deinem Fall nur RssChannel-Objekte in die Liste aufnehmen. Es kann also nicht versehentlich z.B. ein string in der Liste enthalten sein.

mfg

F
10.010 Beiträge seit 2004
vor 17 Jahren

Es ist nicht nur der Typsicherheit wegen.

Mach mal ein paar Geschwindigkeits test, wirst Dich wundern.

D
462 Beiträge seit 2005
vor 17 Jahren

Hab ich vor einigen Wochen schonmal gemacht, echt erstaunlich was das bringt 😉

Ich habe die Geschwindigkeit nicht erwähnt, weil m.E. die Typ-Sicherheit das wichtigste daran ist.

mfg

I
21 Beiträge seit 2004
vor 17 Jahren

Original von FZelle
Es ist nicht nur der Typsicherheit wegen.

Mach mal ein paar Geschwindigkeits test, wirst Dich wundern.

Das wundert mich ein wenig und bringt mich auf die Frage: Wie funktionieren die Generics in C# denn intern?
In Java ist es so, dass Generics im Bytecode nicht mehr existieren. Der Compiler überprüft das also, aber später wird dann doch wieder gecastet. Der Vorteil davon ist, so heißt es immer, dass nicht immer neue Klassen erstellt werden (wie bei C++ templates) und das Programm dadurch klein gehalten wird. Der Nachteil ist eben, dass die Geschwindigkeit nicht steigt (wenn auch nicht sinkt) (und so Sachen wie dass es keine Generic Arrays gibt).

Lange Rede, kurzer Sinn: In C# muss das ja anders sein. Hätte jemand einen Link parat, in dem das beschrieben wird? (Oder erklärt es mir vielleicht sogar jemand von euch 🙂 )

Wir leben zwar alle unter demselben Himmel, haben aber deswegen lange noch nicht alle denselben Horizont.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

kann einer von euch bitte einen Geschwindigkeitsvergleich oder zumindest konkretere Aussagen posten? Mir ist noch nicht klar, welches Wunder mir bisher verborgen geblieben ist. 🙂

herbivore