代码之家  ›  专栏  ›  技术社区  ›  Bob Fanger

我可以从foreach中访问索引吗?

  •  1
  • Bob Fanger  · 技术社区  · 15 年前

    在PHP中,我可以这样做:

    $list = array("element1", "element2");
    foreach ($list as $index => $value) {
      // do stuff
    }
    

    用C#我可以写:

    var list = new List<string>(){ "element1", "element2" };
    foreach (var value in list) 
    {
      // do stuff ()
    }
    

    4 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    在以下位置找到多个解决方案: foreach with index

    我喜欢JarredPar的解决方案:

    foreach ( var it in list.Select((x,i) => new { Value = x, Index=i }) )
    {
        // do stuff (with it.Index)      
    }
    

    丹芬奇的解决方案是:

    list.Each( ( str, index ) =>
    {
        // do stuff 
    } );
    
    public static void Each<T>( this IEnumerable<T> ie, Action<T, int> action )
    {
        var i = 0;
        foreach ( var e in ie ) action( e, i++ );
    }
    


    (我不需要使用 continue break

        2
  •  1
  •   alex    15 年前

    我不确定是否有可能把索引放在foreach中。只需添加一个新变量i,并增加它;这可能是最简单的方法。。。

    int i = 0;
    var list = new List<string>(){ "element1", "element2" };
    foreach (var value in list) 
    {
      i++;
      // do stuff ()
    }
    
        3
  •  1
  •   Hans Kesting    15 年前

    如果你有 List

    var list = new List<string>(){ "element1", "element2" };
    for (int idx=0; idx<list.Length; idx++) 
    {
       var value = list[idx];
      // do stuff ()
    }
    
        4
  •  1
  •   Ash    15 年前

    如果要访问索引,应使用 对于

    for(int i=0; i<list.Count; i++)
    {
       //do staff()
    }