Necesito averiguar cuál es el índice actual de la Fila dentro de un bucle foreach
.Implementación limpia de almacenar el índice de la fila actual
foreach (DataRow row in DataTable[0].Rows)
{
// I do stuff in here with the row, and if it throws an exception
// I need to pass out the row Index value to the catch statement
}
Una excepción puede ocurrir en cualquier punto dentro del bloque try/catch
, pero si uso un contador incremental dentro del bucle foreach
, y la excepción se produce fuera del bucle, voy a conseguir una fila no válida porque' he movido el puntero por uno.
sé que puedo declarar una DataRow
fuera del alcance foreach
, pero el foreach
está dentro de un bloque try/catch
. Necesito pasar el índice de fila para poder usarlo en la declaración catch
. Debo decir que mi DataTable
está al alcance del nivel de clase.
¿Es esta la única forma de obtener el índice de Fila actual? ¿O hay una implementación más limpia?
EDITAR
Por lo tanto, tener más en cuenta esto, yo podría utilizar un int
para almacenar el valor de la fila actual, e incrementar este valor, así:
int i = 0;
try
{
// Some code here - which could throw an exception
foreach (DataRow row in DataTables[0].Rows)
{
// My stuff
i++;
}
// Some code here - which could throw an exception
}
catch
{
// Use the counter
DataRow row = DataTables[0].Rows[i];
}
Sin embargo, si el foreach
no lanza la excepción, entonces el valor de i
será mayor que el número real de filas en la tabla. Obviamente, podría hacer i--;
después del foreach
loop, pero esto parece ser un realmente sucio hackeo.
Declare una variable de contador fuera del 'try' e incremente para cada iteración de bucle. – Oded
Estaba tratando de evitar hacer esto, solo en caso de que hubiera un elegante indexador que pudiera usarse. Aunque tal vez sea mi única solución. : o ( –
) A veces, un ciclo simple para() funciona mejor que para cada uno. Este es uno de esos casos. –