{"id":55000267,"date":"2021-06-01T00:00:00","date_gmt":"2021-11-10T09:12:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=267"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Nichtgenerische_Auflistungen_unter_VBNET","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Nichtgenerische_Auflistungen_unter_VBNET\/","title":{"rendered":"Nicht-generische Auflistungen unter VB.NET"},"content":{"rendered":"<p><b>Unter VB6\/VBA waren die bekanntesten und sofort einsetzbaren Auflistungsklassen das Array und die Collection. Sie boten einfache M&ouml;glichkeiten zum Hinzuf&uuml;gen von Objektverweisen oder Werten, zum L&ouml;schen derselben oder auch zum Bearbeiten. Wer mehr brauchte, konnte sich noch des Dictionary-Objekts bedienen, was aber schon das Einbinden eines weiteren Verweises erforderte. Unter .NET gibt es bei Auflistungsklassen einen wichtigen Unterschied: nicht-generische Auflistungsklassen, die nicht stark typisiert sind und generische Auflistungsklassen, die stark typisiert sind. Der vorliegende Artikel betrachtet die wichtigsten nicht-generischen Auflistungsklassen und ihre Eigenschaften.<\/b><\/p>\n<h2>Hinweis zu den Beispielen<\/h2>\n<p>Die Beispiele dieses Artikels haben wir in LINQPad5 erstellt und ausprobiert. Das ist eine schnellere M&ouml;glichkeit als ein Visual Studio Projekt zu erstellen, das Sie f&uuml;r jeden Test neu kompilieren und starten m&uuml;ssen. Weitere Infos zu LINQPad5 finden Sie beispielsweise im Artikel <b>LINQPad: LINQ, C# und VB einfach ausprobieren <\/b>(<b>www.datenbankentwickler.net\/100<\/b>).<\/p>\n<p>Wir verwenden hier unter <b>Language <\/b>den Wert <b>VB Program <\/b>und rufen unsere Beispielprozeduren jeweils von der Hauptprozedur <b>Sub Main <\/b>auf. <\/p>\n<h2>Was sind Auflistungsklassen<\/h2>\n<p>Auflistungsklassen sind Klassen, mit denen Sie Objekte erstellen k&ouml;nnen, die das Speichern einer Reihe anderer Objekte erlauben. .NET bietet einige Auflistungsklassen f&uuml;r verschiedene Anwendungszwecke an. Sie sind aber nicht einfach nur Sammlungen von Daten, sondern bieten auch die Infrastruktur an, um diese Daten an verschiedenen Stellen auf spezielle Art zu nutzen &#8211; zum Beispiel als Datenquelle von Steuerelementen unter WPF.<\/p>\n<p>Die Auflistungsklassen implementieren verschiedene Interfaces, die Eigenschaften, Methoden und Ereignisse f&uuml;r die unterschiedlichen Zwecke vorsehen. Welche Interfaces eine Auflistungsklasse implementiert, k&ouml;nnen Sie im Objektkatalog von Visual Studio nachsehen (<b>Strg + Alt + J<\/b>). Bild 1 zeigt die Basistypen beziehungsweise Schnittstellen der Auflistung <b>ArrayList<\/b>. Hier finden Sie auch die Eigenschaften, Methoden und Ereignisse der jeweiligen Auflistungsklasse.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_267_001.png\" alt=\"Eigenschaften, Methoden und Ereignisse der IList-Schnittstelle\" width=\"674,627\" height=\"325,4779\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Eigenschaften, Methoden und Ereignisse der IList-Schnittstelle<\/span><\/b><\/p>\n<p>Die <b>ArrayList<\/b>-Auflistungsklasse implementiert beispielsweise die folgenden Interfaces:<\/p>\n<ul>\n<li><b>IEnumerable<\/b>: Stellt die Eigenschaft <b>GetEnumerator <\/b>bereit, die allerdings nicht explizit verwendet wird, sondern das Durchlaufen der enthaltenen Elemente in einer <b>For Each<\/b>-Schleife erlaubt<\/li>\n<li><b>ICollection<\/b>: Liefert vor allem die Eigenschaft <b>Count<\/b>.<\/li>\n<li><b>IList<\/b>: Enth&auml;lt Methoden, um die Liste zu verwalten &#8211; also um Elemente hinzuzuf&uuml;gen, zu entfernen und abzufragen, die Liste zu leeren und weitere Eigenschaften.<\/li>\n<li><b>ICloneable<\/b>: Liefert die Methode <b>Clone<\/b>.<\/li>\n<\/ul>\n<p>Anhand der Schnittstellen, die eine Auflistungsklasse implementiert, k&ouml;nnen Sie erkennen, welche M&ouml;glichkeiten diese bietet. Andere Auflistungsklassen verwenden noch weitere Schnittstellen wie beispielsweise <b>IDeserializationCallback<\/b>, <b>IDictionary <\/b>oder <b>ISerializable<\/b>.<\/p>\n<p>Dadurch, dass die verschiedenen Auflistungsklassen die Schnittstellen implementieren, haben diese einige Gemeinsamkeiten, auf die Sie z&auml;hlen k&ouml;nnen &#8211; zum Beispiel die M&ouml;glichkeit, die Menge der enthaltenen Elemente mit <b>Count <\/b>zu ermitteln oder diese mit <b>For&#8230;Each <\/b>zu durchlaufen.<\/p>\n<h2>Namespaces mit Auflistungsklassen<\/h2>\n<p>Die Auflistungsklassen sind in eigenen Namespaces organisiert. Der Namespace <b>System.Collections <\/b>enth&auml;lt beispielsweise die Auflistungsklassen <b>ArrayList, HashTable<\/b>, <b>SortedList <\/b>oder <b>Stack<\/b>. Die generischen Auflistungsklassen, &uuml;ber die wir in einem weiteren Artikel namens <b>Generische Auflistungen unter VB.NET <\/b>berichten (<b>www.datenbankentwickler.net\/268<\/b>), finden Sie im Namespace <b>System.Collections.Generic<\/b>. Die <b>ObservableCollection<\/b>, die oft als Datenquelle f&uuml;r WPF-Steuerelemente dient, stammt aus dem Namespace <b>System.Collections.Objectmodel<\/b>. Die jeweiligen Schnittstellen sind &uuml;brigens auch in den jeweiligen Namespaces zu finden.<\/p>\n<h2>Nicht-generische versus generische Auflistungsklassen<\/h2>\n<p>Nicht-generische Auflistungsklassen unter VB.Net sind, wie oben bereits angedeutet, nicht &#8220;stark typisiert&#8221;. Was hei&szlig;t das &uuml;berhaupt Das bedeutet, dass wir nicht explizit den Typ der in der Auflistungsklasse enthaltenen Elemente angeben. Deshalb wird hier der Typ <b>Object <\/b>verwendet. Im Gegensatz dazu geben wir bei generischen Auflistungsklassen den Typ der in der Auflistungsklasse enthaltenen Elemente explizit an, zum Beispiel <b>String<\/b> oder auch komplexere Datentypen. Ein Beispiel, das wir schon oft genutzt haben, sind die Auflistungsklassen mit Entit&auml;ten aus einer Datenbank, die wir als Datenquelle f&uuml;r die Steuerelemente unter WPF nutzen &#8211; diese haben beispielsweise den Datentyp <b>Kunde <\/b>oder <b>Produkt<\/b>. Nicht generische Auflistungsklassen k&ouml;nnen Sie hingegen auch Elemente unterschiedlicher Datentypen hinzuf&uuml;gen.<\/p>\n<h2>Beispiele f&uuml;r nicht-generische Auflistungsklassen<\/h2>\n<p>Es gibt beispielsweise die folgenden nicht-generischen Auflistungsklassen:<\/p>\n<ul>\n<li><b>ArrayList<\/b>: eine sortierte Liste von Elementen. Die Sortierung erfolgt nach der Reihenfolge des Hinzuf&uuml;gens der Elemente.<\/li>\n<li><b>Queue<\/b>: Die <b>Queue<\/b>-Auflistungsklasse erm&ouml;glicht das Verwalten von Eintr&auml;gen nach dem First-In, First-Out-Prinzip.<\/li>\n<li><b>Stack<\/b>: Die <b>Stack<\/b>-Auflistungsklasse arbeitet &auml;hnlich wie Queue, aber andersherum: Sie stellt die zuletzt hinzugef&uuml;gten Elemente als Erste wieder bereit.<\/li>\n<li><b>HashTable<\/b>: Die <b>HashTable<\/b>-Auflistungsklasse speichert Schl&uuml;ssel-Wert-Paare und bietet umfangreiche M&ouml;glichkeiten, diese abzufragen.<\/li>\n<\/ul>\n<h2>Die ArrayList-Auflistung<\/h2>\n<p>Wir schauen uns einige Beispiele f&uuml;r den Umgang mit Auflistungsklassen anhand der <b>ArrayList<\/b>-Auflistungsklasse an. Sp&auml;ter stellen wir weitere nicht-generische Auflistungsklassen vor und beschreiben deren Besonderheiten.<\/p>\n<p>Die wichtigsten Methoden und Eigenschaften einer <b>ArrayList <\/b>sind die folgenden:<\/p>\n<ul>\n<li><b>Count<\/b>: Liefert die Menge der enthaltenen Elemente.<\/li>\n<li><b>CopyTo<\/b>: Kopiert den Inhalt der <b>ArrayList<\/b>-Auflistungsklasse in ein Array.<\/li>\n<li><b>Contains<\/b>: Erwartet den Wert eines Elements als Parameter und gibt an, ob dieses enthalten ist.<\/li>\n<li><b>ToArray<\/b>: Kopiert den Inhalt der <b>ArrayList<\/b>-Auflistungsklasse in ein Array des Typs <b>Object<\/b>.<\/li>\n<li><b>IndexOf<\/b>: Liefert den Index des als Parameter angegebenen Elements. Der Index ist immer nullbasiert.<\/li>\n<li><b>GetRange<\/b>: Erstellt eine neue <b>ArrayList<\/b>-Auflistungsklasse nur mit den Elementen, die durch den Startindex und die Menge als Parameter angegeben wurden.<\/li>\n<li><b>Sort<\/b>: Sortiert die Elemente der ArrayList.<\/li>\n<li><b>Reverse<\/b>: Kehrt die Sortierung der Elemente der ArrayList um.<\/li>\n<li><b>Item<\/b>: Liest das Element mit dem angegebenen Index aus oder setzt diesen.<\/li>\n<li><b>Clear<\/b>: Leert die Auflistungsklasse.<\/li>\n<\/ul>\n<h2>Elemente zu einer nicht-generischen Auflistungsklasse hinzuf&uuml;gen<\/h2>\n<p>Die <b>ArrayList<\/b>-Auflistungsklasse ist eine einfache, nicht-generische Auflistungsklasse, daher verwenden wir diese zun&auml;chst f&uuml;r die Beispiele. Sie k&ouml;nnen der <b>ArrayList<\/b> einfach mit der <b>Add<\/b>-Methode neue Elemente hinzuf&uuml;gen, die verschiedenen Typs sein k&ouml;nnen. Sie k&ouml;nnen sogar eine neue <b>ArrayList <\/b>als Element der <b>ArrayList <\/b>hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>ArrayListErstellen\r\n     <span style=\"color:blue;\">Dim <\/span>Gemischt<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> ArrayList\r\n     Gemischt.Add(10)\r\n     Gemischt.Add(\"10\")\r\n     Gemischt.Add(\"Andr&eacute;\")\r\n     Gemischt.Add(<span style=\"color:blue;\">New<\/span> ArrayList)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem sehen Sie, dass wir die Zahl <b>10 <\/b>einmal als Zahl und einmal als Zeichenkette hinzugef&uuml;gt haben. Das weisen die folgenden beiden Anweisungen nach, die Sie der Prozedur hinzuf&uuml;gen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span>(Gemischt.Item(0).GetType.ToString)\r\n<span style=\"color:blue;\">Debug.Print<\/span>(Gemischt.Item(1).GetType.ToString)<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000267\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000267?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000267\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9cc095fa2e\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter VB6\/VBA waren die bekanntesten und sofort einsetzbaren Auflistungsklassen das Array und die Collection. Sie boten einfache M&ouml;glichkeiten zum Hinzuf&uuml;gen von Objektverweisen oder Werten, zum L&ouml;schen derselben oder auch zum Bearbeiten. Wer mehr brauchte, konnte sich noch des Dictionary-Objekts bedienen, was aber schon das Einbinden eines weiteren Verweises erforderte. Unter .NET gibt es bei Auflistungsklassen einen wichtigen Unterschied: nicht-generische Auflistungsklassen, die nicht stark typisiert sind und generische Auflistungsklassen, die stark typisiert sind. Der vorliegende Artikel betrachtet die wichtigsten nicht-generischen Auflistungsklassen und ihre Eigenschaften.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662021,66032021,44000021,44000023,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000267","post","type-post","status-publish","format-standard","hentry","category-662021","category-66032021","category-Entity_Framework","category-PowerApps","category-VBGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000267"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000267\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000267"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}