2012-08-30 30 views
-4
Person tempPerson; 

Console.WriteLine("Enter the name of this new person."); 
tempPerson.Name = Convert.ToString(Console.ReadLine()); 

Console.WriteLine("Now their age."); 
tempPerson.Age = Convert.ToInt32(Console.ReadLine()); 

peopleList.Add(tempPerson); 

RunProgram(); 

tempPerson.Name的,錯誤列表會顯示「未分配使用局部變量‘tempPerson’的,下面是其中創建的每個Person對象的類。使用未分配的局部變量(對象)

class Person : PersonCreator 
{ 
    public Person(int initialAge, string initialName) 
    { 
     initialAge = Age; 
     initialName = Name; 
    } 
    public int Age 
    { 
     set 
     { 
      Age = value; 
     } 
     get 
     { 
      return Age; 
     } 
    } 
    public string Name 
    { 
     set 
     { 
      Name = value; 
     } 
     get 
     { 
      return Name; 
     } 
    } 
} 

我不知道爲什麼這是一個問題,在tempPerson.Age中,沒有任何問題,只用tempPerson.Age運行程序不會帶來任何問題,我的Person類有問題嗎?

回答

6

tempPerson永遠不會初始化爲Person對象,因此它是null - 該變量的任何成員,任何調用將導致NullReferenceException。使用前

必須初始化變量:

var tempPerson = new Person(); 
+0

感謝您的快速反應。管理讓我的程序再次運作。 –

1

你沒有通過定義一個類或聲明一個類類型的變量來創建一個對象。您必須通過在類上調用new來創建一個對象,否則該變量將初始化爲null。執行以下操作:

Person tempPerson = new Person(); 

Console.WriteLine("Enter the name of this new person."); 
tempPerson.Name = Convert.ToString(Console.ReadLine()); 
0

你的Person類是錯誤的,它應該是:

class Person : PersonCreator 
{ 
    public Person(int initialAge, string initialName) 
    { 
     Age = initialAge; 
     Name = initialName; 
    } 
    public int Age 
    { 
     set; 
     get; 
    } 
    public string Name 
    { 
     set; 
     get; 
    } 
} 
0

你的變量tempPerson剛剛宣佈,但尚未初始化。 你要打電話人的構造函數,但是這需要一個空的構造:

Person tempPerson = new Person(); 

一種其他的方式來解決這個問題,我會實施類似如下:

Console.WriteLine("Enter the name of this new person."); 
string name = Convert.ToString(Console.ReadLine()); 

Console.WriteLine("Now their age."); 
string age = Convert.ToInt32(Console.ReadLine()); 

peopleList.Add(new Person(name, age)); 
相關問題