Если вы выполняете цикл по нескольким коллекциям и хотите получить доступ к каждой коллекции более одного раза, foreach
может оказаться не лучшим вариантом.
Попробуйте вместо этого использовать обычный цикл for
:
for (int i = 0; i < _rpt.Items.Count; i++)
{
TextBox _txt = _rpt.Items[i].FindControl("txtId") as TextBox;
TextBox _txt1 = _rpt.Items[i].FindControl("txtName") as TextBox;
if (_rpt1.Items.Count > i)
TextBox _txt3 = _rpt1.Items[i].FindControl("txtVisitor") as TextBox;
//update db
}
Вышеописанное будет работать только так, как ожидалось if (_rpt.Items.Count >= _rpt1.Items.Count)
, поэтому обязательно проверяйте и используйте коллекцию с большинством предметов, если они когда-либо будут отличаться.
Использование цикла foreach
перечисляет элементы в одной коллекции, что позволяет вам напрямую ссылаться на каждый элемент в каждой итерации.Это удобно, если вы обращаетесь только к одной коллекции, так как вам не нужно использовать индексаторы массива, и вы можете просто использовать имя, которое вы даете ему при инициализации цикла.
Это не так удобно, когда вы просматриваете несколько коллекций, поскольку у вас есть ТОЛЬКО ссылка на коллекцию, используемую в заголовке цикла.
Использование цикла for
позволяет отслеживать, по какому индексу вы находитесь (используя int
), что позволяет просто использовать стандартную запись массива для получения элементов в коллекции.