У меня есть ICollection
из Thing
. Thing
имеет string
Недвижимость Name
. Я хотел бы получить массив из всех Name
в моем ICollection
. Я знаю, что могу сделать это, итерации по сборке и построение массива, но есть ли более простой способ сделать это с помощью лямбда-нотации?ICollection <T> в массив строк (с использованием строкового свойства)
ответ
Конечно, 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: Теперь мы знаем, вы действительно сделать нужен массив, было бы немного более эффективным, чтобы сделать это самостоятельно с помощью ручного цикла, как вы знаете размер заранее. Я определенно использовал бы первую форму, пока не узнаю, что это проблема. :)
Спасибо - причина, по которой я хочу, чтобы массив строки реализовал метод 'GetRolesForUser' для моего' RoleProvider' ... Я не ожидая возвращения больших массивов. –
@tacos_tacos_tacos: Правильно - если вам определенно нужен массив строк, то первый из них - это то, что вам нужно. –