【问题标题】:C# Extract list of fields from list of classC#从类列表中提取字段列表
【发布时间】:2009-06-15 07:25:56
【问题描述】:

我有一个特定类的元素列表。此类包含一个字段。

class Foo {public int i;}
List<Foo> list;

我想将列表中所有项目的字段提取到一个新列表中。

List<int> result = list.ExtractField (e => e.i); // imaginary

肯定有多种方法可以做到这一点,但我还没有找到一个好看的解决方案。我认为 linq 可能会有所帮助,但我不确定具体如何。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    只是:

    List<int> result = list.Select(e => e.i).ToList();
    

    List<int> result = list.ConvertAll(e => e.i);
    

    后者效率更高(因为它知道开始时的最终大小),但仅适用于列表和数组,而不适用于任意序列。

    【讨论】:

    • 感谢乔恩,马克,这很快。 :)
    • 在这种情况下,LINQ 不够智能,无法知道最终大小将是list.Count,是否有充分的理由?
    • @TimS.:Select 的结果“只是”一个序列。从理论上讲,它可以这样构建,如果Select 的输入是IList&lt;T&gt;,则输出可能是某个接口的实现,它也暴露了Count 属性——但事实并非如此。不过,这将是一个有趣的替代实现。
    猜你喜欢
    • 2012-06-01
    • 2011-04-07
    • 2017-06-10
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多