【问题标题】: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 的方法是为了提高代码的可读性。
(而且我不需要使用continue 或break)
【解决方案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 ()
}