ICollection<T>转换为字符串数组(使用字符串属性)

4

我有一个ThingICollectionThing有一个string属性Name。 我想获得我的ICollection中所有Name的数组。 我知道可以通过迭代集合并构建数组来实现此目的,但是否有更简洁的lambda表示法来实现这一点?

1个回答

11

当然,LINQ可以让你轻松地做到这一点:

string[] names = things.Select(x => x.Name).ToArray();
当然,如果你只是要遍历它,你不需要 ToArray 部分:
IEnumerable<string> names = things.Select(x => x.Name);

或者您可以使用 ToList 创建一个 List<string>:

List<string> names = things.Select(x => x.Name).ToList();
在���有这些情况下,您都可以使用var而不是明确声明变量类型-我只是为了清晰起见在此处包含了类型。
使用ToList比使用ToArray略微更有效率,因为ToArray中的最后一步涉及从可能超大的缓冲区复制到正确大小的数组。
编辑:现在我们知道您真的需要一个数组,使用手动循环自己完成这个操作会略微更有效率,因为您事先知道尺寸。但在遇到问题之前,我肯定会使用第一种形式 :)

谢谢 - 我想要一个字符串数组的原因是为了实现我的RoleProviderGetRolesForUser方法...我不预计会返回任何大数组。 - tacos_tacos_tacos
@tacos_tacos_tacos:没错 - 如果你确定要一个字符串数组,那么第一个就是你想要的。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接