【问题标题】:Use Linq Select to display data [duplicate]使用 Linq Select 显示数据 [重复]
【发布时间】:2017-03-28 07:20:31
【问题描述】:

我有这段代码可以在控制台中显示List<int> 的内容。

List<int> mylist = new List<int>() { 1, 2, 3, 4, 5 };
mylist.Select(i => { Console.WriteLine(i); return false; });

但它没有显示任何内容。有没有办法在不使用.ForEach() 的情况下使其产生输出?

【问题讨论】:

  • 如果您有建议可以通过编辑改进答案,则无需投票

标签: c# linq


【解决方案1】:

LINQ 扩展的执行会延迟到您开始使用结果。这就是控制台中未显示结果的原因。以下代码正是您在线程中提到的内容,我添加了ToList(),它开始使用结果。

List<int> mylist = new List<int>() { 1, 2, 3, 4, 5 };
mylist.Select(i => { Console.WriteLine(i); return false; }).ToList();

【讨论】:

    【解决方案2】:

    Linq 使用延迟执行;直到需要时才计算结果。

    你永远不会使用Select 的结果;所以它没有被执行。

    试试这个

    mylist
      .Select(i => { Console.WriteLine(i); return false; })
      .Count();
    

    【讨论】:

    • 我将Select 替换为来自重复标记的Any
    【解决方案3】:

    Select 用于操作您的可枚举。如果您想执行一些操作,请使用 foreach 或将数据连接到这样的字符串:

    Console.WriteLine(String.Join("\r\n", myList));
    

    String.Join(separator, collection) 将通过给定的分隔符将您的集合加入到字符串中。

    或者:

    myList.ForEach(x => Console.WriteLine(x));
    

    根据cmets:

    查看newListselect 的选定元素将被存储。在这种情况下,打印某些内容的操作被存储。如果你调用它(第一个红色块),它将被执行。

    这就是为什么它被称为select 而不是execute。它是选择东西到一个新的变量中。请注意,返回的 3 也会在调用时被存储和“执行”。

    【讨论】:

    • 但是为什么不选择打印输出?
    • @MetaColon 检查我的编辑。
    • 迷人的行为。感谢您提供这些信息。
    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多