564 Stimmen

Liste<T> oder IList<T>

Kann jemand mir erklären, warum ich IList über Liste in C# verwenden möchten?

Verwandte Frage: Warum wird es als schlecht angesehen, etwas zu enthüllen List<T>

2 Stimmen

Internet-Suche nach "Code zu einer Schnittstelle nicht eine Implementierung" und Sie können den ganzen Tag lesen..und finden Sie ein paar h0ly Kriege.

11 Stimmen

Diese Frage ist nicht meinungsbasiert. List<T> , IList<T> y T[] sind jeweils für verschiedene Szenarien besser geeignet, und der Unterschied ist im Allgemeinen ziemlich objektiv. Es ist wie diese andere Frage . Die andere Frage weist viele Gemeinsamkeiten auf, ist aber wohl kein echtes Duplikat. In beiden Fällen handelt es sich jedoch nicht um eine Meinungsäußerung. Möglicherweise hat der Prüfer nur auf den Titel der Frage geschaut, ohne die Frage selbst zu lesen. Der Körper ist objektiv.

14voto

Michael Borgwardt Punkte 334642

Der wichtigste Grund für die Verwendung von Schnittstellen anstelle von Implementierungen liegt in den Parametern für Ihre API. Wenn Ihre API einen List-Parameter benötigt, muss jeder, der sie verwendet, List verwenden. Wenn der Parametertyp IList ist, hat der Aufrufer viel mehr Freiheiten und kann Klassen verwenden, von denen Sie noch nie gehört haben und die vielleicht noch nicht einmal existierten, als Ihr Code geschrieben wurde.

7voto

Soundararajan Punkte 1860

Was wäre, wenn .NET 5.0 die System.Collections.Generic.List<T> zu System.Collection.Generics.LinearList<T> . NET ist immer Eigentümer des Namens List<T> aber sie garantieren, dass IList<T> ist ein Vertrag. IMHO sollten wir (zumindest ich) also nicht den Namen von jemandem verwenden (auch wenn es in diesem Fall .NET ist) und später in Schwierigkeiten geraten.

Im Falle der Verwendung von IList<T> wird dem Aufrufer immer garantiert, dass die Dinge funktionieren, und dem Implementierer steht es frei, die zugrunde liegende Sammlung durch eine andere konkrete Implementierung von IList

7voto

yantaq Punkte 3748

Alle Konzepte sind im Grunde in den meisten der obigen Antworten zu den Gründen für die Verwendung von Schnittstellen gegenüber konkreten Implementierungen aufgeführt.

IList<T> defines those methods (not including extension methods)

IList<T> MSDN-Link

  1. hinzufügen
  2. Klar
  3. Enthält
  4. CopyTo
  5. GetEnumerator
  6. IndexOf
  7. einfügen.
  8. entfernen
  9. RemoveAt

List<T> implementiert diese neun Methoden (ohne Erweiterungsmethoden) und hat darüber hinaus etwa 41 öffentliche Methoden, was bei der Entscheidung, welche davon Sie in Ihrer Anwendung verwenden sollten, eine Rolle spielt.

List<T> MSDN-Link

4voto

Peter Lindholm Punkte 2320

Denn die Definition einer IList oder einer ICollection würde andere Implementierungen Ihrer Schnittstellen zulassen.

Möglicherweise möchten Sie ein IOrderRepository haben, das eine Sammlung von Aufträgen entweder in einer IList oder ICollection definiert. Sie könnten dann verschiedene Arten von Implementierungen haben, um eine Liste von Aufträgen bereitzustellen, solange sie den von Ihrer IList oder ICollection definierten "Regeln" entsprechen.

3voto

StuartLC Punkte 99976

IList<> ist fast immer vorzuziehen, wie der Rat des anderen Posters, aber beachten Sie es gibt einen Fehler in .NET 3.5 sp 1 wenn eine IList<> mehr als einen Zyklus der Serialisierung / Deserialisierung mit dem WCF DataContractSerializer durchläuft.

Es gibt jetzt ein SP, das diesen Fehler behebt: KB 971030

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X