Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ICollection <T> to string array (using string property)

I have an ICollection of Thing. Thing has a string property Name. I would like to get an array of all Name in my ICollection. I know I can do this by iterating over the collection and building the array, but is there a neater way to do this with lambda notation?

like image 716
tacos_tacos_tacos Avatar asked Dec 21 '22 04:12

tacos_tacos_tacos


1 Answers

Sure, LINQ lets you do this very easily:

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

Of course if you're just going to iterate over it, you don't need the ToArray part:

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

Or you could create a List<string> with ToList:

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

In all of these cases you could use var instead of explicitly declaring the variable type - I've only included the type here for clarity.

Using ToList can be very slightly more efficient than using ToArray, as the final step in ToArray involves copying from a possibly-oversized buffer to a right-sized array.

EDIT: Now we know you really do need an array, it would be slightly more efficient to do this yourself with a manual loop, as you know the size beforehand. I'd definitely use the first form until I knew it was a problem though :)

like image 115
Jon Skeet Avatar answered Jan 07 '23 22:01

Jon Skeet