【问题标题】:How to read the data of generic list without iterate it?如何在不迭代的情况下读取通用列表的数据?
【发布时间】:2016-02-28 13:39:16
【问题描述】:

我已经创建了一个这样的列表:

List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(7);

现在如果我想迭代它,我应该这样做:

foreach (int prime in list)
{
    Console.WriteLine(prime);
}

如何用一行代码做到这一点?

【问题讨论】:

  • 为什么你需要用一行来做这个?
  • foreach (int prime in list){ Console.WriteLine(prime);} or list.ForEach(prime =&gt; Console.WriteLine(prime)); 但你最好不要这样做。
  • @SonerGönül 代码改进我也尝试过:Console.WriteLine(list) 但我得到:System.Collections.Generic.List
  • @EugenePodskal:可能比这更简单:list.ForEach(Console.WriteLine)。仍然不是很好。
  • @SevengamesXoom:在一行“代码改进”中以什么方式做到这一点?您希望看到什么具体的好处?

标签: c# loops foreach


【解决方案1】:

可以使用List&lt;T&gt;.ForEach

list.ForEach(Console.WriteLine);

这使用了一个方法组转换来创建一个Action&lt;int&gt;来为list的每个元素调用Console.WriteLine(int)

但是,我个人会使用现有的 foreach 循环...它更清楚地表明您期望循环的每次迭代都会产生副作用。 Eric Lippert 有一个great blog post 详细介绍了这一哲学反对意见。

这段代码完全安全 - 但更“聪明”,当您阅读代码时,这几乎不是一件好事。问问自己,您更可能一目了然地理解哪些代码

请注意,这不是根据问题标题“不迭代”访问列表中的数据 - 只是迭代在 您的 代码中并不明显。它当然仍然存在于ForEach 方法中。

【讨论】:

  • list.ForEach 的唯一问题是我得到:System.Collections.Generic.List。 OT:哇,你的声望很高!
  • @SevengamesXoom:“我得到System.Collections.Generic.List”是什么意思?这只是一种类型的名称。代码应该可以正常工作,至少在任何现代 C# 编译器中是这样。 (它可能依赖于 C# 3 和 C# 4 在方法组转换方面的差异,但仅此而已。)
  • 我的意思是,我得到的是2-3-7,而不是System.Collections.Generic.List
  • @SevengamesXoom:那你没有正确复制代码。听起来您已将其更改为Console.WriteLine(list),这根本不是一回事。我给出的代码运行良好。
  • +1 建议使用foreach。我一直在努力想一个好的理由来使用 ForEach 扩展方法。
【解决方案2】:

你可以使用ForEach:

list.ForEach(x => Console.WriteLine(x))

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多