Как скопировать список в массив - PullRequest
7 голосов
/ 17 декабря 2009

У меня есть список Guid's

List<Guid> MyList;

Мне нужно скопировать его содержимое в массив

Guid[]

Пожалуйста, порекомендуйте мне красивое решение

Ответы [ 5 ]

22 голосов
/ 17 декабря 2009

Как сказал Люк в комментариях, конкретный тип List<T> уже имеет метод ToArray(). Но если вы используете C # 3.0, вы можете использовать метод расширения ToArray() на любом экземпляре IEnumerable (который включает IList, IList<T>, коллекции, другие массивы и т. Д.)

var myList = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array = myList.ToArray(); // instance method

IList<Guid> myList2 = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array2 = myList2.ToArray(); // extension method

var myList3 = new Collection<Guid> {Guid.NewGuid(), Guid.NewGuid()};
Guid[] array3 = myList3.ToArray(); // extension method

Относительно вашего второго вопроса:

Вы можете использовать метод Select для выполнения необходимой проекции:

var list = new List<MyClass> {new MyClass(), new MyClass()};
Guid[] array = list.Select(mc => mc.value).ToArray();
10 голосов
/ 17 декабря 2009

Вам просто нужно вызвать MyList.ToArray (), чтобы получить массив элементов.

5 голосов
/ 17 декабря 2009

Новый способ (с использованием расширений или метода ToArray () в общих списках в .Net 2.0):

Guid[] guidArray = MyList.ToArray();

Старый способ:

Guid[] guidArray = new guidArray[MyList.Length];
int idx = 0;
foreach (var guid in MyList)
{
    guidArray[idx++] = guid;
}
4 голосов
/ 17 декабря 2009

Еще один вариант, кроме Guid[] MyArray = MyList.ToArray():

Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from
MyList.CopyTo(MyArray, 0);

Это решение может быть лучше, если по какой-либо причине у вас уже есть массив правильного размера и вы просто хотите его заполнить (а не создавать новый, как это делает List<T>.ToArray()).

3 голосов
/ 17 декабря 2009

Используя метод расширения Enumerable.ToArray () , вы можете сделать:

var guidArray = MyList.ToArray();

Если вы все еще используете C # 2.0, вы можете использовать метод List.ToArray . Синтаксис тот же (кроме ключевого слова var в C # 2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...