2009-12-17 3 views
6

У меня есть список Guid-хКак скопировать список в массив

List<Guid> MyList; 

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

Guid[] 

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

+0

Другой вопрос, MyClass { Значение руководства; } Как скопировать свойство Guid в массив Guid's? Я имею в виду не использовать утверждение итерации –

+1

Я не 100% на этикете, но лучше было бы задать новый вопрос в качестве нового вопроса. Я могу ошибаться. –

ответ

22

Как Luke сказал в комментарии, тип 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(); 
+0

Muchas gracias. –

+5

'List ' имеет свой собственный (то есть не расширение) метод 'ToArray', доступный с .NET2. (Точно такой же синтаксис, как и выше, хотя вы не сможете использовать 'var' или инициализаторы объектов без C# 3.) – LukeH

+0

@ Luke: Очень хорошая точка! Я обновил свой ответ соответственно. Благодарю. –

10

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

3

Использование Enumerable.ToArray() Extension Method вы можете сделать:

var guidArray = MyList.ToArray(); 

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

5

Новый способ (с помощью расширения или метода 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; 
} 
+3

C# 2.0 имеет 'List.ToArray', который использует' System.Array.Copy' –

+1

Я думаю, я показываю свой возраст. :-) – tvanfosson

4

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

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

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

Смежные вопросы