Be sure to choose your System.Collections class carefully. Using the wrong type can restrict your use of the collection.
Consider the following questions:
Do you need a sequential list where the element is typically discarded after its value is retrieved?
If yes, consider using the Queue class or the Queue<(Of <(T>)>) generic class if you need first-in-first-out (FIFO) behavior. Consider using the Stack class or the Stack<(Of <(T>)>) generic class if you need last-in-first-out (LIFO) behavior.
If not, consider using the other collections.
Do you need to access the elements in a certain order, such as FIFO, LIFO, or random?
Do you need to access each element by index?
Will each element contain one value, a combination of one key and one value, or a combination of one key and multiple values?
Do you need to sort the elements differently from how they were entered?
Do you need fast searches and retrieval of information?
Do you need collections that accept only strings?
LINQ to Objects allows developers to use LINQ queries to access in-memory objects as long as the object type implements IEnumerable or IEnumerable<(Of <(T>)>). LINQ queries provide a common pattern for accessing data, are typically more concise and readable than standard foreach loops and provide filtering, ordering and grouping capabilities. In addition, LINQ queries can also provide performance increases. For more information, see LINQ to Objects.
Reference
Other Resources