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

133

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

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?

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

Vaccano
источник

Ответы:

278

Ты ищешь

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

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

using System.Linq

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

Разбитое стекло
источник
Я тоже об этом подумал. Но Select не отображается в intellisense.
Vaccano
GAAAAAAA! Мне не хватало linq include!
Vaccano
1
вам нужно использовать using System.Data.Linq; затем следуйте за ответом BrokenGlass
Рами Шариф
1
Я тупой! Ах хорошо. Бесплатная репутация за то, что помогли мне разобраться.
Vaccano
фантастическое решение. Я хотел получить доступ к строке «id» в моем списке объектов. List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Работает
19

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

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

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

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

Ясон
источник
6

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

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Shadow Wizard - это ухо для тебя
источник
6

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

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

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

Спирос
источник
Спасибо за публикацию для толпы .NET 2.0!
webworm 03