0
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 类有问题吗?

4

4 回答 4

10

tempPerson永远不会初始化为Person对象,所以它是null- 对变量的任何成员的任何调用都将导致NullReferenceException.

必须在使用前初始化变量:

var tempPerson = new Person();
于 2012-08-30T09:24:17.227 回答
2

您不会通过定义类或声明类类型的变量来创建对象。您必须通过在类上调用 new 来创建对象,否则该变量将被初始化为 null。请执行下列操作:

Person tempPerson = new Person ();

Console.WriteLine("Enter the name of this new person.");
tempPerson.Name = Convert.ToString(Console.ReadLine());
于 2012-08-30T09:24:10.453 回答
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;
    }
} 
于 2012-08-30T09:29:34.897 回答
0

您的变量 tempPerson 刚刚声明,但未初始化。您必须调用 Person 的构造函数,但这需要一个空的构造函数:

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));
于 2012-08-30T09:29:45.233 回答