195

I've seen examples of this done using .ToList() on array types, this seems to be available only in .Net 3.5+. I'm working with .NET Framework 2.0 on an ASP.NET project that can't be upgraded at this time, so I was wondering: is there another solution? One that is more elegant than looping through the array and adding each element to this List (which is no problem; I'm just wondering if there is a better solution for learning purposes)?

string[] arr = { "Alpha", "Beta", "Gamma" };

List<string> openItems = new List<string>();

foreach (string arrItem in arr)
{
    openItems.Add(arrItem);
}

If I have to do it this way, is there a way to deallocate the lingering array from memory after I copy it into my list?

Dmytro Shevchenko
  • 33,431
  • 6
  • 51
  • 67
Nick Rolando
  • 25,879
  • 13
  • 79
  • 119

2 Answers2

490

Just use this constructor of List<T>. It accepts any IEnumerable<T> as an argument.

string[] arr = ...
List<string> list = new List<string>(arr);
Dmytro Shevchenko
  • 33,431
  • 6
  • 51
  • 67
41

From .Net 3.5 you can use LINQ extension method that (sometimes) makes code flow a bit better.

Usage looks like this:

using System.Linq; 

// ...

public void My()
{
    var myArray = new[] { "abc", "123", "zyx" };
    List<string> myList = myArray.ToList();
}

PS. There's also ToArray() method that works in other way.

andrew.fox
  • 7,435
  • 5
  • 52
  • 75
  • @quest4truth - Visual Studio version has nothing to do with it. It will work in 2022 and VS Code as well as long as you have .NET with Linq (+ `using System.Ling` there. – andrew.fox May 13 '22 at 15:48