#asp.net
#asp.net
Вопрос:
Ниже приведен файл моего класса, имена которого отличаются от того, которое используется в проекте.
public partial class College
{
public List<Students> Students;
}
public partial class Students
{
public List<Activity> Activity;
}
public partial class Activity{
public List<string> Name;
}
Ниже приведен мой код aspx.cs
College.Students.Add(new Students{ studentno= studentnumber.text});
int index2 = College.Students.FindIndex(c => c.studentno== lineno);
College.Students[index2].Activity= new List<Activity>();
College.Students[index2].Activity.Add(new Activity{ });
int k = (College.Students[index2].Activity.Count) - 1;
College.Students[index2].Activity[k].Name = new List<string>();
string ctrlStr = String.Empty;
foreach (string ctl in Page.Request.Form)
{
if (ctl.Contains("Name"))
{
ctrlStr = ctl.ToString();
College.Students[index2].Activity[k].Name[0] = (Request.Form[ctrlStr]);--- It errors out here...not understanding the reason...Am i missing any line of code
}
Ответ №1:
Ссылка на объект не установлена на экземпляр объекта
Измените объявление списков в ваших классах на:
public List<Students> Students = new List<Students>();
Просто public List<Students> Students;
вы говорите, что это Students
существует, но на самом деле не настраиваете его (вы устанавливаете его на null
), поэтому вы не можете использовать ни один из методов или свойств, которые поставляются с List<T>
, пока вы не инициализируете его.
Индекс вне диапазона
Эта строка выводит индекс за пределы диапазона
College.Students[index2].Activity[k].Name[0]
потому что, несмотря на то, что вы обновили Name
до List<string>
, вы еще ничего к нему не добавили, поэтому пытаетесь ссылаться на несуществующий индекс. В дополнение к этому используйте:
College.Students[index2].Activity[k].Name.Add((Request.Form[ctrlStr]);
Комментарии:
1. Однако это только первая проблема. Ему также необходимо узнать, что он работает с другим экземпляром своего класса при каждом запросе — каждая обратная передача или событие будут воссоздавать эти списки.
2. Также сделайте то же самое для действия и имени.
3. @Richard Schneider: Действие и имя в примере кода изменены, но я использовал множественное число списков и классов , чтобы предположить, что это всего лишь пример. Очевидно, что рекомендуется не оставлять свои объекты в непригодном состоянии с самого начала 🙂
4. @Joel Coehoorn: Это правда, но я не знаю, действительно ли это входит в рамки вопроса, который касался конкретно двух исключений… Кроме того, я собираюсь подставить шею и сказать, что «Джанет» — это «она», а не «он» 😉
Ответ №2:
Вам необходимо инициализировать списки
public partial class College
{
public List<Students> Students = new List<Students>();
}
public partial class Students
{
public List<Activity> Activity = new List<Activity>();
}
public partial class Activity{
public List<string> Name = new List<string>();
}