2016-03-08 62 views
0

我的意思是,aPerson.PhoneNumber.Number是一个字符串,所以它应该取字符串类型的值。了解有关系实现C#

再次,在代码中,aPerson.PhoneNumber = phoneNumberaPerson.PhoneNumberphoneNumber都是PersonPhoneNumber类型的对象。

的行

aPerson.PhoneNumber.Number = "Test Phone"; 

工作后,实际上改变了什么?

任何人都可以请告诉我为什么这两行在编译时显示错误?

class PersonPhoneNumber 
{ 
    public string Number { get; set; } 
} 

class Person 
{ 
    public string Name { get; set; } 
    public PersonPhoneNumber PhoneNumber { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Person aPerson = new Person(); 
     aPerson.Name = "Test Name"; 

     aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object. 

     PersonPhoneNumber phoneNumber = new PersonPhoneNumber(); 

     aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object. 

     aPerson.PhoneNumber = phoneNumber; 
     aPerson.PhoneNumber.Number = "Test Phone"; // This does not show any error 

     Console.WriteLine(aPerson.Name); 
     Console.WriteLine(aPerson.PhoneNumber.Number); 
    } 

回答

0

首先,我不认为你的意思是编译期间的错误,而是在运行时。

您的问题是,aPerson.PhoneNumber为第2次尝试设置Number属性为null。直到你设置aPerson.PhoneNumber = phoneNumber它不再为空。所以这个错误很明显。

+0

谢谢安迪。现在很明显。 – Tareq

1

如果你想aPerson.PhoneNumber.Number = "Test Phone";的工作方式如你的代码所示,你必须首先初始化你的aPerson.PhoneNumber

这是在你的Person类的构造函数通常做法:

​​

免责声明:这只能解决错误你 - 这是不好的做法一般。

+0

谢谢Filburt为我展示第二种方式。 – Tareq