我在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();
}
当我执行页面时,对象引用未设置为对象的实例。错误消息。
答案 0 :(得分:2)
在Customer.PhoneList
的默认构造函数中创建Customer
时,不会在id / name构造函数中创建它。要么添加
PhoneList = new List<PhoneNumber>();
到第二个构造函数,或用this()
语法链接构造函数:
public Customer(int id, string name) : this()
{
this.CustomerID = id;
this.CustomerName = name;
}
将首先调用默认构造函数。
答案 1 :(得分:1)
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; }
}
答案 2 :(得分:0)
您没有在Customer(int id, string name)
构造函数中初始化PhoneList,因此在添加新客户时它为null。
答案 3 :(得分:0)
null是引用类型的默认值。因为你没有在使用之前初始化你的PhoneList,它仍然是null并且你得到这个例外
答案 4 :(得分:0)
您是否考虑过使用参数在构造函数中初始化PhoneList属性? ;)
答案 5 :(得分:0)
尝试
public Customer(int id, string name) : this()
{
this.CustomerID = id;
this.CustomerName = name;
}
答案 6 :(得分:0)
public Customer(int id, string name)
{
PhoneList = new List<PhoneNumber>(); //this constructor is call
this.CustomerID = id;
this.CustomerName = name;
}
你没有在你的代码中调用的其他构造函数中添加PhoneList,所以它从未初始化