虽然我正在实例化对象,但对象引用没有设置为对象的实例错误

本文关键字:对象 设置 错误 实例 对象引用 实例化 | 更新日期: 2023-09-27 17:49:21

  public partial class College
  {
    public CollegeDetails CollegeDetails;
    public List<Students> Students;
    public StaffDetails StaffDetails;
  }
 public partial class Students 
 {
    public StudentDetails StudentDetails ;
    public List<Marks> Marks;
 }

在我的aspx.cs文件

        College college = new College ();
    Students students= new Students (); 
    //List<Students> students = new List<Students>; 
     if (IsValidPost())
            {
                if (Session["xml"] == null)
                {
                    college.students.Add(new students{ });
                    Addtogrid();
                }
                else
                {
                    college = (College)(Session["xml"]);
                    if (college.students.Count == 0)----getting object refernce erro here
                    {
                        college.students.Add(new students{ });
                    }
                    Addtogrid();
                 }
            }
            else
            {
                if (Session["xml"] != null)
                {
                 }

请帮。

虽然我正在实例化对象,但对象引用没有设置为对象的实例错误

您需要在构造函数中添加StudentsMarks的创建。

public College()
{
   Students = new List<Students>();
}
public Students()
{
  Marks = new List<Marks>();
}

或者如果构造函数不可用,则在使用

之前创建这些列表

您从未在College类中实例化Student List。对于College和Student类中的其他对象也是如此。

public partial class College   
{ 
  public CollegeDetails collegeDetails;
  //Never instantiate
  //public List<Students> students;      
  //Should be:
  public List<Students> students = new List<Students>();
  public StaffDetails staffDetails;   
} 

仅仅声明了College和Student的实例并不意味着创建了包含它们的对象的新实例。您还需要创建它们的实例:

public partial class College {
  public College() {
    CollegeDetails = new CollegeDetails();
    Students = new List<Students>();
    StaffDetails = new StaffDetails();
  }
  public CollegeDetails CollegeDetails;
  public List<Students> Students;
  public StaffDetails StaffDetails;
}
public partial class Students {
  public Students() {
    StudentDetails = new StudentDetails();
    Marks = new List<Marks>();
  }
  public StudentDetails StudentDetails;
  public List<Marks> Marks;
}

您将需要做类似于以下的事情,以便您的组合类型暴露的类型不是null:

public partial class College
{
    public College()
    {
        CollegeDetails = new CollegeDetails();
        Students = new List<Student>();
        StaffDetails = new StaffDetails();
    }
    public CollegeDetails CollegeDetails;
    public List<Students> Students;
    public StaffDetails StaffDetails;
}
public partial class Student
{
    public Student()
    {
        StudentDetails = new StudentDetails();
        Marks = new List<Mark>();
    }
    public StudentDetails StudentDetails ;
    public List<Marks> Marks;
}

以上几点说明:

类型的构造函数只在创建实例时调用一次,这允许你准备好,可以这么说;在这种情况下,需要实例化预期由外部源(任何public)使用的类型。

我将Students重命名为Student(非复数),因为List<Student>通过名为Students的属性可访问而实现复数;我怀疑你也可以为Mark/s做同样的事情。

在我看来,College对象的构造函数没有实例化student列表。