myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grundlagen von C# (https://www.mycsharp.de/wbb2/board.php?boardid=88)
--- Welche Liste in .NET verwenden? (https://www.mycsharp.de/wbb2/thread.php?threadid=121600)


Geschrieben von mchrd am 14.02.2019 um 23:39:
  Welche Liste in .NET verwenden?
Hallo zusammen,

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

C#-Code:
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


Geschrieben von Abt am 15.02.2019 um 01:01:
 
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. fröhlich

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. ;-)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.02.2020 21:23