2013-06-01 1 views
3

У меня есть ICollection из Thing. Thing имеет string Недвижимость Name. Я хотел бы получить массив из всех Name в моем ICollection. Я знаю, что могу сделать это, итерации по сборке и построение массива, но есть ли более простой способ сделать это с помощью лямбда-нотации?ICollection <T> в массив строк (с использованием строкового свойства)

ответ

10

Конечно, LINQ позволяет сделать это очень легко:

string[] names = things.Select(x => x.Name).ToArray(); 

Конечно, если вы только собираетесь перебрать его, вы не нуждаетесь в ToArray часть:

IEnumerable<string> names = things.Select(x => x.Name); 

Или вы могли бы создать List<string> с ToList:

List<string> names = things.Select(x => x.Name).ToList(); 

Во всех из этих случаев вы могли бы использовать var вместо явного объявления типа переменной - я только включил здесь тип для ясности.

Использование ToList может быть очень немного более эффективным, чем при использовании ToArray, как заключительный шаг в ToArray включает в себя копирование, возможно, из-буфера негабаритного к правому размеру массива.

EDIT: Теперь мы знаем, вы действительно сделать нужен массив, было бы немного более эффективным, чтобы сделать это самостоятельно с помощью ручного цикла, как вы знаете размер заранее. Я определенно использовал бы первую форму, пока не узнаю, что это проблема. :)

+0

Спасибо - причина, по которой я хочу, чтобы массив строки реализовал метод 'GetRolesForUser' для моего' RoleProvider' ... Я не ожидая возвращения больших массивов. –

+0

@tacos_tacos_tacos: Правильно - если вам определенно нужен массив строк, то первый из них - это то, что вам нужно. –