En el escenario de ejemplo siguiente, me gusta agregar el índice del elemento a la consola de salida. Y no lo hago funcionar.

        public static void Main()
        {
            List<string> myList = new List<string> { "This", "is", "a", "test" };
            foreach (var item in myList)
                Debug.WriteLine(item);
        }

Algo como esto

Debug.WriteLine(item.index + " : : + item);

3
Roberto Pagnotta 19 may. 2020 a las 11:04

5 respuestas

Puede usar {{X0 }} para obtener un elemento con su índice e imprimirlo

List<string> myList = new List<string> { "This", "is", "a", "test" };
foreach (var item in myList.Select((value, index) => new { value, index }))
    Debug.WriteLine($"{item.value}:{item.index}");

También puede usar método IndexOf, mordió el correo, si la lista tiene elementos duplicados

foreach (var item in myList)
    Debug.WriteLine($"{item}:{myList.IndexOf(item)}");

El uso de un ciclo for normal también podría ser una opción

for (int i = 0; i < myList.Count; i++) 
    Debug.WriteLine($"{myList[i]}:{i}");
4
Pavel Anikhouski 19 may. 2020 a las 08:13
public static void Main()
{
    int index = 0;
    List<string> myList = new List<string> { "This", "is", "a", "test" };
    foreach (var item in myList)
    {
        Debug.WriteLine(item + " " + index);
        index++;
    }
}

Recuerde que a veces el enfoque más simple es el mejor, especialmente si es un principiante. Si bien la respuesta de Pavel también es correcta y preferible, si necesita hacer esta pregunta, recién está comenzando con la programación, le aconsejaría que se adhiera a soluciones generales (que incrementan una variable de índice) que funcionan en todos los lenguajes de programación. Una vez que se sienta cómodo con ellos, pase a los azúcares específicos del idioma.

1
Krzysztof Skowronek 19 may. 2020 a las 08:13

El foreach de C # no tiene un índice incorporado. Puedes ir con dos enfoques.

int index=-1;
foreach (var item in myList){
     index++;
     Debug.WriteLine(index + ":" + item);
}

O puedes usar el bucle for

for (int i = 0; i < myList.Length; i++)
{
   var item = myList[i];
   Debug.WriteLine(i+ ":" + item);
}
0
007chris 19 may. 2020 a las 08:13

Puede declarar la variable index:

List<string> myList = new List<string> { "This", "is", "a", "test" };
var index = 0;
foreach (var item in myList)
    Console.WriteLine($"{item} {index++}");

O usando un simple for bucle donde i ya está declarado y su bucle es más flexible: puede iterar de principio a fin y de principio a fin de List<T>:

List<string> myList = new List<string> { "This", "is", "a", "test" };
for (int i = 0; i < myList.Count; i++)
{
     Console.WriteLine($"{myList[i]} {i}");
}
0
StepUp 19 may. 2020 a las 08:12

Puede usar

myList.IndexOf(item)

Para acceder al índice del elemento, por lo que su código debe ser:

public static void Main()
{
    List<string> myList = new List<string> { "This", "is", "a", "test" };
    foreach (var item in myList)
        Debug.WriteLine(item + ": " + myList.IndexOf(item));
}
0
twerk kid 19 may. 2020 a las 08:25