C#从类列表中提取字段列表
我有一个特定类的元素列表。此类包含一个字段C#从类列表中提取字段列表,c#,linq,C#,Linq,我有一个特定类的元素列表。此类包含一个字段 class Foo {public int i;} List<Foo> list; class Foo{public int i;} 名单; 我想将该字段从列表中的所有项提取到一个新列表中 List<int> result = list.ExtractField (e => e.i); // imaginary List result=List.ExtractField(e=>e.i);//虚构的 当然有多种方法可
class Foo {public int i;}
List<Foo> list;
class Foo{public int i;}
名单;
我想将该字段从列表中的所有项提取到一个新列表中
List<int> result = list.ExtractField (e => e.i); // imaginary
List result=List.ExtractField(e=>e.i);//虚构的
当然有多种方法可以做到这一点,但我还没有找到一个好看的解决方案。我想linq可能会有所帮助,但我不确定具体如何。只是:
List<int> result = list.Select(e => e.i).ToList();
List result=List.Select(e=>e.i.ToList();
或
List result=List.ConvertAll(e=>e.i);
后者效率更高(因为它知道开始时的最终大小),但只适用于列表和数组,而不适用于任意序列。谢谢Jon,Marc,这很快。:)是否有充分的理由表明LINQ不够聪明,无法在这种情况下知道最终大小将是
list.Count
?@TimS.:Select
的结果“只是”一个序列。理论上,如果Select
的输入是一个IList
,那么输出可能是一个接口的某个实现,该接口还公开了一个Count
属性,但事实并非如此。不过,这将是一个有趣的替代实现。
List<int> result = list.ConvertAll(e => e.i);