[英]Object refrence error in Parent / Child Relationship class structure
我在 c# 中有以下代码片段
public class Customer
{
public Customer()
{
PhoneList = new List<PhoneNumber>();
}
public Customer(int id, string name)
{
this.CustomerID = id;
this.CustomerName = name;
}
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public List<PhoneNumber> PhoneList { get; set; }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class PhoneNumber
{
public int ID { get; set; }
public int Number { get; set; }
public PhoneNumber()
{
}
public PhoneNumber(int id, int number)
{
this.ID = id;
this.Number = number;
}
}
我在 UI 中使用这些类如下
protected void Page_Load(object sender, EventArgs e)
{
List<Customer> list = new List<Customer>();
list.Add(new Customer(2, "John"));
list.Add(new Customer(3, "Joe"));
list.Add(new Customer(4, "Don"));
**list[0].PhoneList.Add(new PhoneNumber(1, 1231213));//Object reference not set to an instance of an object.**
list[0].PhoneList.Add(new PhoneNumber(1, 1231213));
GridView1.DataSource = list;
GridView1.DataBind();
}
当我执行页面获取Object 引用未设置为 object 的实例时。 错误信息。
在Customer
的默认构造函数中创建Customer.PhoneList
时,您不会在 id/name 构造函数中创建它。 要么添加
PhoneList = new List<PhoneNumber>();
到第二个构造函数,或使用this()
语法链接构造函数:
public Customer(int id, string name) : this()
{
this.CustomerID = id;
this.CustomerName = name;
}
这将首先调用默认构造函数。
Customer
中的每个构造函数都需要初始化PhoneList
集合。 您正在调用采用Id
和Name
的构造函数覆盖,它不会初始化集合。 更改该构造函数,如下所示:
public class Customer
{
public Customer()
{
PhoneList = new List<PhoneNumber>();
}
public Customer(int id, string name)
: this()
{
this.CustomerID = id;
this.CustomerName = name;
}
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public List<PhoneNumber> PhoneList { get; set; }
}
您没有在Customer(int id, string name)
构造函数中初始化 PhoneList,因此当您添加新客户时它是 null。
null 是引用类型的默认值。 因为您没有在使用之前初始化 PhoneList,所以它仍然是 null 并且您会收到此异常
您是否考虑过在构造函数中使用参数初始化 PhoneList 属性? ;)
尝试做
public Customer(int id, string name) : this()
{
this.CustomerID = id;
this.CustomerName = name;
}
public Customer(int id, string name)
{
PhoneList = new List<PhoneNumber>(); //this constructor is call
this.CustomerID = id;
this.CustomerName = name;
}
您没有在代码中调用的其他构造函数中添加 PhoneList,因此它从未初始化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.