Преобразование списка объектов в массив одного из свойств объекта

Скажем, у меня есть следующий класс:

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

а затем создаю список следующих классов (List<ConfigItemType> MyList)

Теперь у меня есть метод со следующей сигнатурой:

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

Как я могу вставить MyList в listGoesHere, используя значение в ConfigItemType.Name в качестве массива строк params?

Я уверен, что Linq может это сделать... но MyList не имеет на нем метода select (что я и использовал).

Ответ 1

Вы ищете

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

Так как Select - это метод расширения, обязательно добавьте это пространство имен, добавив

using System.Linq

к вашему файлу - тогда он появится с Intellisense.

Ответ 2

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

Да, LINQ может это сделать. Это просто:

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

Скорее всего, проблема в том, что у вас либо нет ссылки на System.Core, либо отсутствует директива using для System.Linq.

Ответ 3

Это также должно работать:

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

Ответ 4

Для всех, кто застрял с .NET 2.0, как и я, попробуйте следующий способ (применимый к примеру в OP):

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

где ConfigItemList - ваша переменная списка.