Как получить массив членов массива - PullRequest
0 голосов
/ 10 июня 2010

Предположим, у меня есть класс

public class Foo
{
    public Bar Bar { get; set; }
}

Тогда у меня есть другой класс

public class Gloop
{
    public List<Foo> Foos { get; set; }
}

Какой самый простой способ получить List<Bar> Foo.Bars?

Я использую C # 4.0 и могу использовать Linq, если это лучший выбор.

UPDATE:

Просто для небольшой дозы реальности причина этого в том, что у меня есть класс службы Windows, который содержит внутренний производный класс ServiceBase в качестве свойства. В итоге я получаю такой код:

public class Service
{
    public ServiceBase InnerService { get; set; }
}

public class ServiceHost
{
    private List<Service> services = new List<Service>();
    static void Main()
    {
         // code to add services to the list
         ServiceBase.Run(services.Select(service => service.InnerService).ToArray());
    }
}

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Это просто, если я вас правильно понял:

List<Foo> foos = gloop.Foos; // Or wherever you're getting it from
List<Bar> bars = foos.Select(foo => foo.Bar)
                     .ToList();

Если вам нужен только IEnumerable<Bar>, вы можете просто использовать Select без вызова ToList. Конечно, вам не нужна локальная переменная foos, если она вам не нужна - вы можете просто иметь один оператор. Я выделил их только в том случае, если у вас есть List<Foo> или Foo[] (вы упоминаете массивы в строке темы).

1 голос
/ 10 июня 2010

var bars = gloop.Foos.Select(foo => foo.Bar);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...