{"id":55000012,"date":"2015-04-01T00:00:00","date_gmt":"2020-05-11T12:05:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=12"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Auflistungen_mit_der_ArrayList","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Auflistungen_mit_der_ArrayList\/","title":{"rendered":"Auflistungen mit der ArrayList"},"content":{"rendered":"<p><b>Von VBA kennen Sie als Auflistungsklassen zun&auml;chst die eingebaute Collection. Wer noch etwas weiter geht, bindet die Scripting Runtime Library ein und nutzt die Dictionary-Klasse zum Speichern von Auflistungen. &Uuml;ber den reinen Programmcode hinweg lie&szlig;en sich diese Elemente unter VBA kaum nutzen &#8211; als Datenherkunft etwa f&uuml;r Formular oder Kombinationsfelder taugten sie nicht. Unter C# sieht dies anders aus. Es gibt eine ganze Reihe verschiedener Auflistungsklassen, die sich teilweise auch als Datenherkunft f&uuml;r Steuerelemente eignen. In diesem Artikel schauen wir uns die ArrayList als Vertreter der Auflistungsklassen an.<\/b><\/p>\n<p>Die Auflistungsklasse <b>ArrayList<\/b> steckt im Namespace <b>System.Collections<\/b>. Diese f&uuml;gen Sie mit der <b>using<\/b>-Anweisung zur Klasse hinzu &#8211; also so:<\/p>\n<pre>using System.Collections;<\/pre>\n<p>Auf diese Weise k&ouml;nnen Sie gleich auf das ArrayList-Objekt und seine Methoden und Eigenschaften zugreifen und m&uuml;ssen nicht immer den Namespace voranstellen. Ohne Angabe des Namespace mit der using-Anweisung w&auml;re f&uuml;r die Deklaration beispielsweise diese Zeile n&ouml;tig:<\/p>\n<pre>System.Collections.ArrayList arrayList;<\/pre>\n<p>Wenn Sie den Namespace zuvor wie oben beschrieben angegeben haben, reicht dies aus:<\/p>\n<pre>ArrayList arrayList;<\/pre>\n<h2>Schnittstellen von Auflistungsklassen<\/h2>\n<p>Neben den eigentlichen <b>Collection<\/b>-Klassen enthalten die beiden Namespaces noch einige weitere Objekte. Einige davon sind Interfaces, also Schnittstellenklassen. Diese beschreiben die grundlegenden Methoden und Eigenschaften der <b>Collection<\/b>-Objekte. Die <b>Collection<\/b>-Objekte implementieren diese Schnittstellen, was kurz gefasst bedeutet, dass sie die f&uuml;r die Schnittstelle vorgegebenen Methoden, Eigenschaften und Ereignisse enthalten.<\/p>\n<p>Diese Schnittstellenklassen sehen Sie sich am besten im Objektkatalog an (<b>Strg + Alt + J<\/b>). Wenn Sie dort unter <b>mscorlib<\/b> den Eintrag <b>System.Collections <\/b>ausw&auml;hlen, erhalten Sie die &Uuml;bersicht aus Bild 1. Dort sehen Sie, dass zum Beispiel die Methode <b>Add <\/b>zum Hinzuf&uuml;gen eines Auflistungsobjekts aus der Schnittstelle <b>IList <\/b>stammt &#8211; genauso wie einige andere Methoden. Die folgenden Schnittstellenklassen liefern die meisten Methoden und Eigenschaften, aus denen sich die verschiedenen Auflistungsklassen zusammensetzen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_02\/pic_12_001.png\" alt=\"Schnittstelle einer Auflistungsklasse im Objektkatalog\" width=\"500\" height=\"614,2035\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Schnittstelle einer Auflistungsklasse im Objektkatalog<\/span><\/b><\/p>\n<ul>\n<li><b>ICollection<\/b>: Liefert neben anderen die <b>Count<\/b>-Eigenschaft zum Ermitteln der Anzahl der Elemente und die <b>CopyTo<\/b>-Methode, mit der Sie den Inhalt der Auflistungsklasse in ein Array kopieren k&ouml;nnen.<\/li>\n<li><b>IList<\/b>: Liefert Methoden, um Listenelemente hinzuzuf&uuml;gen, zu entfernen oder deren Informationen zu ermitteln. Auflistungsklassen, die diese Schnittstelle implementieren, stellen ihre Elemente &uuml;ber einen Index bereit. Dies entspricht also etwa dem <b>Collection<\/b>-Objekt, das Sie von VBA kennen. Die Elemente der <b>IList<\/b>-Schnittstelle haben Sie bereits im Artikel <b>Von VBA Zu C#: Arrays <\/b>(<b>www.datenbankentwickler.de\/6<\/b>) kennengelernt.<\/li>\n<li><b>IDictionary<\/b>: Liefert &auml;hnliche Methoden wie <b>IList<\/b>, aber ist f&uuml;r die Verwaltung von Name-Wert-Paaren ausgelegt. Dies entspricht dem <b>Dictionary<\/b>-Objekt der <b>Scripting Runtime Library<\/b>, das Sie m&ouml;glicherweise unter VBA genutzt haben.<\/li>\n<li><b>IEnumerable<\/b>: Steuert die M&ouml;glichkeit bei, die Elemente einer Auflistung per <b>foreach<\/b>-Schleife zu durchlaufen.<\/li>\n<\/ul>\n<p>Diese Schnittstellenklassen liefern allerdings nicht alle Methoden und Eigenschaften etwa der <b>ArrayList<\/b>-Klasse &#8211; diese tr&auml;gt selbst auch noch eigene Elemente bei.<\/p>\n<h2>ArrayList deklarieren und instanzieren<\/h2>\n<p>Ein <b>ArrayList<\/b>-Objekt k&ouml;nnen Sie in zwei Schritten deklarieren und instanzieren:<\/p>\n<pre>ArrayList arrayList;\r\narrayList = new ArrayList();<\/pre>\n<p>Wenn diese beiden Anweisungen ohnehin direkt nacheinander ausgef&uuml;hrt werden, k&ouml;nnen Sie dies auch in einer Zeile durchf&uuml;hren:<\/p>\n<pre>ArrayList arrayList = new ArrayList();<\/pre>\n<h2>Elemente hinzuf&uuml;gen<\/h2>\n<p>Die einfachste Methode, ein Element zu einer <b>ArrayList <\/b>hinzuzuf&uuml;gen, ist die <b>Add<\/b>-Methode. Sie erwartet lediglich den hinzuzuf&uuml;genden Wert beziehungsweise die Variable mit dem Objektverweis als Parameter. Die folgenden Anweisungen f&uuml;llen das Array beispielsweise mit drei Zeichenketten:<\/p>\n<pre>arrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList.Add(\"Element 3\");<\/pre>\n<p>Die <b>Add<\/b>-Methode f&uuml;gt die Elemente immer hinten an die Liste an.<\/p>\n<h2>Index beim Hinzuf&uuml;gen ermitteln<\/h2>\n<p>Wenn Sie gleich beim Hinzuf&uuml;gen den Indexwert f&uuml;r das neue Element ermitteln wollen, speichern Sie das Ergebnis der <b>Add<\/b>-Methode in einer Integer-Variablen. Diesen k&ouml;nnen Sie dann wie folgt auf der Konsole ausgeben:<\/p>\n<pre>int indexNeuesElement = arrayList.Add(\"Element 4\");\r\nConsole.WriteLine(\"Der Index des neuen Elements lautet: {0}\", indexNeuesElement);<\/pre>\n<h2>Elemente direkt beim Initialisieren hinzuf&uuml;gen<\/h2>\n<p>Sie k&ouml;nnen auch direkt beim Initialisieren eine Liste der Elemente in geschweiften Klammern angeben:<\/p>\n<pre>arrayList = new ArrayList { \"Element 1\", \"Element 2\", \"Element 3\" };<\/pre>\n<h2>Anzahl der Elemente beim Erstellen angeben<\/h2>\n<p>Sie k&ouml;nnen beim Erstellen eines <b>ArrayList<\/b>-Objekts gleich die Anzahl der Eintr&auml;ge angeben &#8211; und zwar in Klammern hinter dem <b>ArrayList<\/b>-Schl&uuml;sselwort nach der <b>new<\/b>-Anweisung. Folgendes legt eine <b>ArrayList <\/b>mit drei Elementen an, aber nur die ersten beiden werden gef&uuml;llt. Bei der Ausgabe ber&uuml;cksichtigt die <b>foreach<\/b>-Schleife nur solche Elemente, die auch gef&uuml;llt wurden:<\/p>\n<pre>arrayList = new ArrayList(3);\r\narrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\nforeach (string Element in arrayList) {\r\n     Console.WriteLine(\"Element: {0}\", Element);\r\n}<\/pre>\n<p>Mit der Eigenschaft <b>Capacity <\/b>geben Sie die Anzahl der reservierten Elemente zur&uuml;ck oder legen diese fest &#8211; zum Beispiel so:<\/p>\n<pre>Console.WriteLine(\"Anzahl Elemente: {0}\", \r\n     arrayList.Capacity);<\/pre>\n<h2>Element an bestimmter Stelle einf&uuml;gen<\/h2>\n<p>Da die <b>Add<\/b>-Methode neue Elemente immer nur hinten an die Liste anh&auml;ngt, ben&ouml;tigen wir noch eine Methode, die Elemente an einer bestimmten Position einf&uuml;gt. Dies gelingt mit der Methode <b>Insert<\/b>. Diese erwartet als ersten Parameter den Index-Wert der Position, an der das neue Element eingef&uuml;gt werden soll, als zweiten Parameter das einzuf&uuml;gende Element. Die folgenden Anweisungen legen zun&auml;chst zwei Elemente an und f&uuml;gen dann ein weiteres Element an die Position des zweiten, sodass dieses an die dritte Stelle rutscht:<\/p>\n<pre>arrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList.Insert(1, \"Element zwischen 1 und 2\");<\/pre>\n<p>Da der Index der ArrayList 0-basiert ist, geben Sie als Position f&uuml;r den zweiten Eintrag den Wert <b>1 <\/b>an.<\/p>\n<h2>Element entfernen<\/h2>\n<p>Wenn Sie gezielt ein Element aus einem Array entfernen m&ouml;chten, ben&ouml;tigen Sie entweder dessen Inhalt oder dessen Index-Wert. Wenn Sie das Element kennen, k&ouml;nnen Sie es direkt &uuml;ber seinen Inhalt mit der <b>Remove<\/b>-Methode l&ouml;schen:<\/p>\n<pre>arrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList.Add(\"Element 3\");\r\narrayList.Remove(\"Element 2\");\r\nforeach (string eintrag in arrayList)\r\n{\r\n     Console.WriteLine(eintrag);\r\n}\r\n\/\/Ausgabe:\r\n\/\/Element 1\r\n\/\/Element 2<\/pre>\n<p>Oder Sie kennen den Index des zu l&ouml;schenden Elements. Diesen k&ouml;nnen Sie dann der <b>RemoveAt<\/b>-Methode als Parameter &uuml;bergeben. Das folgende Beispiel entfernt beispielsweise das zweite von drei Elementen aus einer <b>ArrayList<\/b>:<\/p>\n<pre>arrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList.Add(\"Element 3\");\r\narrayList.RemoveAt(1);\r\nforeach (string eintrag in arrayList) {\r\n     Console.WriteLine(eintrag);\r\n}\r\n\/\/Ausgabe:\r\n\/\/Element 1\r\n\/\/Element 2<\/pre>\n<h2>Mehrere Elemente entfernen<\/h2>\n<p>Wenn Sie mehrere zusammenh&auml;ngende Elemente entfernen m&ouml;chten, nutzen Sie die <b>RemoveRange<\/b>-Methode. Diese erwartet zwei Parameter: den Index des ersten und die Anzahl der zu entfernenden Elemente. Im folgenden Beispiel entfernt die Methode das zweite und dritte von vier Elementen:<\/p>\n<pre>arrayList = new ArrayList();\r\narrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList.Add(\"Element 3\");\r\narrayList.Add(\"Element 4\");\r\narrayList.RemoveRange(1, 2);\r\nforeach (string eintrag in arrayList) {\r\n     Console.WriteLine(eintrag);\r\n}\r\n\/\/Ausgabe:\r\n\/\/Element 1\r\n\/\/Element 4<\/pre>\n<h2>Elemente aus einer anderen ArrayList anf&uuml;gen<\/h2>\n<p>Wenn Sie zwei <b>ArrayList<\/b>-Objekte verwenden und die Elemente des zweiten hinten an das erste Array anf&uuml;gen m&ouml;chten, verwenden Sie die Methode <b>AddRange<\/b>. Im folgenden Beispiel werden zwei <b>ArrayList<\/b>-Objekte mit je zwei Elementen gef&uuml;llt. Dann f&uuml;gt die <b>AddRange<\/b>-Methode die Elemente von <b>arrayList2 <\/b>hinten an <b>arrayList <\/b>an:<\/p>\n<pre>arrayList = new ArrayList();\r\narrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList2 = new ArrayList();\r\narrayList2.Add(\"Element 3\");\r\narrayList2.Add(\"Element 4\");\r\narrayList.AddRange(arrayList2);<\/pre>\n<p>W&uuml;rden Sie nun alle Elemente von <b>arrayList <\/b>auf der Konsole ausgeben, erhielten Sie dieses Ergebnis:<\/p>\n<pre>Element 1\r\nElement 2\r\nElement 3\r\nElement 4<\/pre>\n<h2>Elemente aus einer anderen ArrayList einf&uuml;gen<\/h2>\n<p>Auf &auml;hnliche Weise f&uuml;gen Sie die Elemente des zweiten <b>ArrayList<\/b>-Objekts an beliebiger Stelle in der ersten ArrayList ein. Dazu nutzen Sie diesmal jedoch die Methode <b>InsertRange<\/b>. Diese erwartet neben der Angabe der einzuf&uuml;genden Liste noch den Index, an dessen Stelle die neuen Elemente eingef&uuml;gt werden sollen:<\/p>\n<pre>arrayList = new ArrayList();\r\narrayList.Add(\"Element 1\");\r\narrayList.Add(\"Element 2\");\r\narrayList2 = new ArrayList();\r\narrayList2.Add(\"Element 3\");\r\narrayList2.Add(\"Element 4\");\r\narrayList.InsertRange(1,arrayList2);\r\nforeach (String eintrag in arrayList) {\r\n     Console.WriteLine(eintrag);\r\n}\r\n\/\/Ausgabe:\r\n\/\/Element 1\r\n\/\/Element 3\r\n\/\/Element 4\r\n\/\/Element 2<\/pre>\n<h2>Neue ArrayList aus Elementen einer ArrayList erstellen<\/h2>\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\/55000012\/\">\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\/55000012?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\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000012\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"08e24e6614\"\/>\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>Von VBA kennen Sie als Auflistungsklassen zun&auml;chst die eingebaute Collection. Wer noch etwas weiter geht, bindet die Scripting Runtime Library ein und nutzt die Dictionary-Klasse zum Speichern von Auflistungen. &Uuml;ber den reinen Programmcode hinweg lie&szlig;en sich diese Elemente unter VBA kaum nutzen &#8211; als Datenherkunft etwa f&uuml;r Formular oder Kombinationsfelder taugten sie nicht. Unter C# sieht dies anders aus. Es gibt eine ganze Reihe verschiedener Auflistungsklassen, die sich teilweise auch als Datenherkunft f&uuml;r Steuerelemente eignen. In diesem Artikel schauen wir uns die ArrayList als Vertreter der Auflistungsklassen an.<\/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":[66022015,662015,44000001,44000025],"tags":[],"yst_prominent_words":[66062049,66062053,66062041],"class_list":["post-55000012","post","type-post","status-publish","format-standard","hentry","category-66022015","category-662015","category-CGrundlagen","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000012","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=55000012"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000012\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000012"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}