Laden...

Welche Liste in .NET verwenden?

Erstellt von mchrd vor 5 Jahren Letzter Beitrag vor 5 Jahren 788 Views
M
mchrd Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
Welche Liste in .NET verwenden?

Hallo zusammen,

ich habe mal eine Frage zu der ich keine wirkliche Antwort gefunden haben. Folgendes Codebeispiel:

ICollection test = new List<string>();
ICollection<string> test2 = new List<string>();
List<string> test3 = new List<string>();
IEnumerable<string> test4 = new List<string>();
IEnumerable test5 = new List<string>();

In welchen Fällen verwendet man was bzw. welche Vorteile hat es, wenn man sich z. B. auf ein Interface einschränkt anstelle immer einer List zurückzugeben (wie bei test3). Habt ihr ggf. reale Beispiele wo man was verwendet? Gibt es Performancevorteile/Speichervorteile etc.?

Ich hoffe, dass ich rüber bringen konnte was ich meine.

Danke für eure Hilfe!

LG

16.807 Beiträge seit 2008
vor 5 Jahren

Zunächst mal passt der Titel leider nicht wirklich zur Frage.
Daher zuerst mal zum Inhalt:

Interfaces sind dazu da Gemeinsamkeiten abzudecken; so basiert in .NET fast jede Art von zB. Enumeration auf einem IEnumerable.
Unabhängig von Listen: es empfiehlt sich immer das Exposen von Interfaces statt einer konkreten Implementierung, wenn möglich.

Weiter:
Darüber hinaus bietet eben .NET verschiedene Arten von Listen an.
Natürlich gibt es Situationen, wo mehrere Listentypen passen - oder eben auch nur eine gewisse Art.
Das ist dann Aufgabe des Software Designs, das zu evaluieren bzw. zu definieren.
Man kann aber Deine Frage hier nicht mit "X hat immer Vorteile" beantworten - das kommt einfach ganz drauf an. Ein pauschales "da verwendet man immer X"; das gibt es leider nicht.
Sich über die Performance oder den Speicher Gedanken zu machen, ist nicht der erste Schritt für ein Software Design.

Tendentiell versucht man immer den größten gemeinsamen Nenner abzudecken.
Dabei beachtet man aber grundlegende Dinge; zB dass man Enumeratoren nicht mehrfach durchlaufen sollte; siehe auch Zwischenmaterialisierung

Zum Titel:
var hat damit null zutun.
Var ist nur eine implizite Typdeklaration; da hilft ein kurzer Blick in die Doku. =)

PS: ich habe das Thema von ICollection test bzw. var test in Welche Liste in .NET verwenden? geändert, damit der Titel dem Inhalt wenigstens etwas näher kommt.

PPS: auf das Code Beispiel bin ich hier nicht eingegangen, weil es kein Sinn macht bzw. hier völlig irrelevant ist.
Das hier ist ein Beispiel, bei dem quasi jede Liste passt; im Endeffekt beachtest Du bei Deinem Beispiel aber null den Zweck - daher kann man auch nicht sagen, dass Typ A besser passt oder B.
Du deklarierst ja nur. 😉