假设我有一个班级
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。
更新:
仅仅为了一点点实际,原因是我有一个Windows Service类,它包含一个内部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());
}
}
答案 0 :(得分:2)
这个很简单,如果我理解你的话:
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 :(得分:1)
var bars = gloop.Foos.Select(foo => foo.Bar);