{"id":171,"date":"2010-08-24T22:38:17","date_gmt":"2010-08-24T20:38:17","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=171"},"modified":"2025-03-02T11:31:42","modified_gmt":"2025-03-02T10:31:42","slug":"net-list-overview","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2010\/08\/net-list-overview\/","title":{"rendered":".NET-Listen im \u00dcberblick"},"content":{"rendered":"<p>Das .NET Framework stellt verschiedene Listen-Implementierungen bereit. Je nach Anwendungsfall muss die richtige Listenklasse ausgew\u00e4hlt werden.<!--more--><\/p>\n<h2>Die generische Klasse List&lt;T&gt; aus dem Namespace System.Collections.Generic<\/h2>\n<p>Der Klassiker f\u00fcr schnelle Listen ist die seit dem .NET Framework 2.0 vorhandene generische Klasse List&lt;T&gt;. Sie basiert intern auf einem typisierten Array. Die Funktionen IndexOf(T) und Conatins(T) benutzen die <a href=\"http:\/\/de.wikipedia.org\/wiki\/Lineare_Suche\" rel=\"noopener\">lineare Suche<\/a>, die bei n Elementen bis zu n Vergleichsoperationen ausf\u00fchrt. Der Aufwand f\u00fcr die Suche eines Elements ist daher direkt proportional zur Elementanzahl. F\u00fcr kleine Listen ist die lineare Suche die beste Wahl.<\/p>\n<p>Um die Konformit\u00e4t zu den Microsoft .NET Framework Design Guidelines nicht zu beeintr\u00e4chtigen, wird empfohlen, generische Listen nur lokal oder als private Membervariablen einzusetzen. F\u00fcr \u00f6ffentliche Memberelemente sollte kein Gebrauch von generischen Listen gemacht werden, da dies die Erweiterbarkeit von Bibliotheken einschr\u00e4nkt. Der Grund daf\u00fcr ist, dass generische Listen keine virtuellen Funktionen besitzen und \u00c4nderungen des Listenverhaltens nur durch eine andere Basisklasse realisiert werden k\u00f6nnen. Eine Bibliothek w\u00fcrde in diesem Fall nicht mehr schnittstellenkompatibel bleiben.<\/p>\n<p>\u00d6ffentliche Funktionen mit generischen Listen als Parameter oder R\u00fcckgabewert k\u00f6nnen statt des konkreten Listentyps auf die Listenschnittstelle IList&lt;T&gt; ausweichen, um die Konformit\u00e4t zu den Microsoft .NET Framework Design Guidelines zu wahren. Daraus ergibt sich ein weiterer Vorteil, da nun zus\u00e4tzlich typisierte Arrays und andere Listen, die IList&lt;T&gt; implementieren, \u00fcbergeben werden k\u00f6nnen.<\/p>\n<h2>Die generische Klasse Collection&lt;T&gt; aus dem Namespace System.Collections.ObjectModel<\/h2>\n<p>Die generische Listenimplementierung Collection&lt;T&gt;, die ebenfalls die Schnittstelle IList&lt;T&gt; implementiert, ist f\u00fcr benutzerdefinierte Erweiterungen konzipiert. Es existieren virtuelle Funktionen f\u00fcr alle m\u00f6glichen \u00c4nderungsoperationen, die es erlauben, jedes erdenkliche benutzerdefinierte Verhalten hinzuzuf\u00fcgen. Der Preis f\u00fcr diese Flexibilit\u00e4t ist eine etwas geringere Performance.<\/p>\n<p>Bei Verwendung des Standardkonstruktors basiert diese Klasse intern auf der Klasse List&lt;T&gt;. Wird der Konstruktor Collection&lt;T&gt;(IList&lt;T&gt; list) benutzt, wird die angegebene Liste intern verwendet, da dieser Konstruktor lediglich die Referenz der \u00fcbergebenen Liste speichert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das .NET Framework stellt verschiedene Listen-Implementierungen bereit. Je nach Anwendungsfall muss die richtige Listenklasse ausgew\u00e4hlt werden.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,13],"class_list":["post-171","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-lists"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=171"}],"version-history":[{"count":13,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/171\/revisions"}],"predecessor-version":[{"id":828,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/171\/revisions\/828"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}