Vaccano
Vaccano

Reputation: 82291

Convert a list of objects to an array of one of the object's properties

Say I have the following class:

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}

and then I make a list of the following classes (List<ConfigItemType> MyList)

Now I have a method with the following signature:

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)

How can I fit MyList in to the listGoesHere using the value in ConfigItemType.Name as the params string array?

I am fairly sure that Linq can do this.... but MyList does not have a select method on it (which is what I would have used).

Upvotes: 155

Views: 161053

Answers (4)

SpyrosN
SpyrosN

Reputation: 73

For everyone who is stuck with .NET 2.0, like me, try the following way (applicable to the example in the OP):

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) 
{ 
   return ci.Name; 
}).ToArray();

where ConfigItemList is your list variable.

Upvotes: 6

jason
jason

Reputation: 241583

I am fairly sure that Linq can do this.... but MyList does not have a select method on it (which is what I would have used).

Yes, LINQ can do this. It's simply:

MyList.Select(x => x.Name).ToArray();

Most likely the issue is that you either don't have a reference to System.Core, or you are missing an using directive for System.Linq.

Upvotes: 22

Shadow Wizard
Shadow Wizard

Reputation: 66399

This should also work:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())

Upvotes: 6

BrokenGlass
BrokenGlass

Reputation: 160852

You are looking for

MyList.Select(x=>x.Name).ToArray();

Since Select is an Extension method make sure to add that namespace by adding a

using System.Linq

to your file - then it will show up with Intellisense.

Upvotes: 324

Related Questions