【问题标题】:Can I access the index from within a foreach?我可以从 foreach 中访问索引吗?
【发布时间】:2011-04-28 11:48:14
【问题描述】:

在 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 ()
}

但是如何在 C# 版本中访问索引值?

【问题讨论】:

标签: c# php foreach indexing


【解决方案1】:

foreach with index找到多个解决方案

我喜欢 JarredPar 的解决方案:

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

和 Dan Finch 的解决方案:

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++ );
}

我选择 Dan Finch 的方法是为了提高代码的可读性。
(而且我不需要使用continuebreak

【讨论】:

    【解决方案2】:

    如果你想访问索引,你应该使用 for 循环

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

    i是索引

    【讨论】:

      【解决方案3】:

      如果你有List,那么你可以使用索引器 + for 循环:

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

      【讨论】:

        【解决方案4】:

        我不确定是否可以在 foreach 中获取索引。只需添加一个新变量 i 并递增它;这可能是最简单的方法......

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

        【讨论】:

          猜你喜欢
          • 2016-11-07
          • 1970-01-01
          • 2019-11-12
          • 1970-01-01
          • 2011-06-12
          • 1970-01-01
          • 1970-01-01
          • 2010-10-30
          • 1970-01-01
          相关资源
          最近更新 更多