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

时间:2010-10-21 08:44:17

标签: c# php foreach indexing

在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#版本中访问索引值?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

如果您想访问索引,则应使用进行循环

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

i 是索引