====== Collections ====== The collections in many aspects are similar to the VO arrays, but they differ from them as you need to specify the type of the elements (of course, you can type the elements as ''object'' leaving this completely open. The collections are available in the namespaces * System.Collections * System.Collections.Generic * System.Collections.Concurrent * System.Collections.ObjectModel * System.Collections.Specialized There are a lot of different ''Collection'' classes, but the most important are: * [[https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1|System.Collections.Generic.List]] * [[https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2|System.Collections.Generic.Dictionary]] * [[https://docs.microsoft.com/en-us/dotnet/api/system.collections.sortedlist|System.Collections.SortedList]] * [[https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist|System.Collections.ArrayList]] If you need some help, which Collection class to use, here is a help: * [[https://docs.microsoft.com/en-us/dotnet/standard/collections/selecting-a-collection-class|MSDN: Selecting a collection class]] * [[https://docs.microsoft.com/en-us/dotnet/standard/collections/commonly-used-collection-types|MSDN: Commonly used collection types]] There are a few very important things you should know about collections: * They are not arrays, and therefore they are **0-based**, so the first member of the collection is **element 0**, and there is no compiler switch that can change this, because it are the classes itself that are written this was * You **cannot** change a collection while you are using it in a ''foreach'' loop. * most collections are using generics, to you need to specify the type(s) of the elements in the declaration of the variable A few code samples (please look at samples for the single classes [[collections:list|System.Collections.Generic.List]] and [[collections:dictionary|System.Collections.Generic.Dictionary]]) for deeper looks): using System.Collections.Generic local oList as List local nCount as int oList := List{} oList:Add( "Hi girls" ) oList:Add( "Hi guys" ) nCount := oList:Count foreach cItem as string in oList // do something next oList:Remove( "Hi guys" ) oList:RemoveAt( 0 ) local oDictionary as Dictionary local nCount as int oDictionary := Dictionary{} oDictionary:Add( 1, "Hi girls" ) oDictionary:Add( 2, "Hi guys" ) foreach oItem as KeyValuePair in oDictionary // do something next