Мне нужно выяснить, какой текущий индекс строки из цикла foreach
.
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
}
Исключение может возникнуть в любой точке блока try/catch
, но если я использую инкрементныйсчетчик в цикле foreach
, и исключение происходит вне цикла, я получу недопустимую строку, потому что я переместил указатель на единицу.
Я знаю, что могу объявить DataRow
вне области действия foreach
, но foreach
находится внутри блока try/catch
.Мне нужно передать индекс строки, чтобы я мог использовать его в операторе catch
.Я должен сказать, что мой DataTable
находится на уровне класса.
Действительно ли это единственный способ получить текущий индекс строки?Или есть более чистая реализация?
РЕДАКТИРОВАТЬ
Итак, уделив больше внимания этому вопросу, я мог бы использовать int
для хранения текущего значения строки и увеличенияэто значение примерно так:
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];
}
Однако, если foreach
не выдает исключение, значение i
будет больше, чем фактическое количество строк в таблице.Очевидно, я мог бы сделать i--;
после foreach
цикла, но это похоже на действительно грязный хак.