Могу ли я получить доступ к индексу внутри foreach? - PullRequest
1 голос
/ 21 октября 2010

В 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 ]

2 голосов
/ 21 октября 2010

Найдено несколько решений по: foreach с индексом

Мне понравилось решение 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)

1 голос
/ 21 октября 2010

Если вы хотите получить доступ к индексу, вы должны использовать для loop

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

i - индекс

1 голос
/ 21 октября 2010

Если у вас есть List, то вы можете использовать индексатор + для цикла:

var list = new List<string>(){ "element1", "element2" };
for (int idx=0; idx<list.Length; idx++) 
{
   var value = list[idx];
  // do stuff ()
}
1 голос
/ 21 октября 2010

Я не уверен, что можно получить индекс в foreach. Просто добавьте новую переменную i и увеличьте ее; это, наверное, самый простой способ сделать это ...

int i = 0;
var list = new List<string>(){ "element1", "element2" };
foreach (var value in list) 
{
  i++;
  // do stuff ()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...