我有ICollection
Thing
。 Thing
有一个string
属性Name
。我希望在Name
中获得所有ICollection
的数组。我知道我可以通过遍历集合并构建数组来做到这一点,但有一种更简洁的方法来使用lambda表示法吗?
答案 0 :(得分:10)
当然,LINQ可以让您轻松完成此任务:
string[] names = things.Select(x => x.Name).ToArray();
当然,如果你只是要迭代它,你不需要ToArray
部分:
IEnumerable<string> names = things.Select(x => x.Name);
或者您可以使用List<string>
创建ToList
:
List<string> names = things.Select(x => x.Name).ToList();
在所有这些情况下,您可以使用var
而不是明确声明变量类型 - 为了清楚起见,我只在此处包含了类型。
使用ToList
可能比使用ToArray
更有效,因为ToArray
中的最后一步涉及从可能超大的缓冲区复制到正确大小的数组。
编辑:现在我们知道你真的做需要一个数组,用手动循环自己做稍微更有效率,因为你事先知道它的大小。我肯定会使用第一种形式,直到我知道这是一个问题,但是:)