2011-04-28 81 views
0

我有以下的C#代码片段对象refrence错误

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(); 

    } 

当我正在执行获取的页面时未将对象引用设置为obj的实例等。错误消息。

回答

2

。无论是添加

PhoneList = new List<PhoneNumber>(); 

给第二个构造,或链的构造与this()语法:

public Customer(int id, string name) : this() 
{ 
    this.CustomerID = id; 
    this.CustomerName = name; 
} 

这将首先调用默认的构造函数。

+0

+1,我无法输入那么快! – Pondidum 2011-04-28 09:14:45

+0

+1为快速解决方案 – 2011-04-28 09:22:24

1

Customer中的每个构造函数都需要初始化PhoneList集合。您正在调用构造函数覆盖,它需要IdName,并且它不会初始化该集合。更改构造函数如下:

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; } 
} 
+0

感谢和+1了回答。 – 2011-04-28 09:21:11

0

你是不是在Customer(int id, string name)构造函数初始化PHONELIST,当你添加新的客户也因此无效。

0

null是引用类型的默认值。因为你不初始化PHONELIST它使用前,它仍然为空,当你创建Customer.PhoneListCustomer的默认构造函数,你不要在ID /名称的构造函数创建它,你得到这个异常

0

你有没有考虑在你的构造函数中用参数初始化PhoneList属性? ;)

0

尝试做

public Customer(int id, string name) : this()  
{   
    this.CustomerID = id;   
    this.CustomerName = name;  
} 
0
public Customer(int id, string name) 
    { 
     PhoneList = new List<PhoneNumber>(); //this constructor is call 
     this.CustomerID = id; 
     this.CustomerName = name; 
    } 

你没有在其他构造这是被称为在代码中添加PHONELIST,因此,它永远不会初始化