2011-04-28 82 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,因此,它永遠不會初始化