【问题标题】:Iterating through a list with out using ForEach loop在不使用 ForEach 循环的情况下遍历列表
【发布时间】:2013-02-27 07:47:39
【问题描述】:

我有一个字符串列表:

var list = new List<string> {"apples","peaches", "mango"};

有没有办法在不使用 foreach 循环的情况下遍历列表并在控制台窗口中显示项目,可能是使用 lambda 和委托。

我希望输出如下所示:

以下水果可供选择:
苹果
桃子
芒果

【问题讨论】:

  • 为什么要在没有foreach 的情况下这样做?
  • 这是一个提示:检索长度并从 0 迭代到长度 -1
  • 有很多方法可以做到这一点。有什么要求,为什么foreach 不满足?

标签: c# lambda


【解决方案1】:

您可以使用String.Join 连接所有行:

string lines = string.Join(Environment.NewLine, list);
Console.Write(lines);

【讨论】:

  • 你可能救了我的命
【解决方案2】:

到目前为止,最明显的是老式的 for 循环:

for (var i = 0; i < list.Count; i++)
{
    System.Console.WriteLine("{0}", list[i]);
}

【讨论】:

  • 好的,对我来说这是最清晰的版本,我最喜欢它。谢谢
【解决方案3】:
for (int i = 0; i < list.Count; i++)
    {
    Console.WriteLine(list[i])
    }

【讨论】:

    【解决方案4】:

    我喜欢 linq 的这个特殊方面

    list.ForEach(Console.WriteLine);
    

    它本身并没有使用 ForEach 循环,因为它使用了 ForEach 演员。但是,嘿,这仍然是一个迭代。

    【讨论】:

    • 请注意,List&lt;T&gt;.ForEach 不是 LINQ 方法,而只是一个普通的旧常规 List&lt;T&gt; 方法; LINQ 方法永远不会像 List&lt;T&gt;.ForEach 那样纯粹因为它们的副作用而被调用。
    • 是的,技术上我同意,但这些功能通常与 linq 混为一谈 :-)
    【解决方案5】:

    您可以使用List&lt;T&gt;.ForEach 方法,它实际上不是 LINQ 的一部分,但看起来像:

    list.ForEach(i => Console.WriteLine(i));
    

    【讨论】:

      【解决方案6】:

      迭代List的方式有3种:

      //1 METHOD
      foreach (var item in myList)
      {
          Console.WriteLine("Id is {0}, and description is {1}", item.id, item.description);
      }
      
      //2 METHOD   
      for (int i = 0; i<myList.Count; i++)
      { 
          Console.WriteLine("Id is {0}, and description is {1}", myList[i].id, myMoney[i].description);
      }
      
      //3 METHOD lamda style
      myList.ForEach(item => Console.WriteLine("id is {0}, and description is {1}", item.id, item.description));
      

      【讨论】:

      • 方法 3 的简洁性在一些开发人员中很受欢迎,但它的缺点是你无法“打破”它,如果可以在所有项目都被访问之前减少处理。
      【解决方案7】:

      好吧,您可以尝试以下方法:

      Debug.WriteLine("The folowing fruits are available:");
      list.ForEach(f => Debug.WriteLine(f));
      

      它非常等效于 foreach 循环,但不使用 foreach 关键字,

      话虽如此,我不知道为什么在遍历对象列表时要避免 foreach 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 2014-07-13
        相关资源
        最近更新 更多