【问题标题】:understanding Has A relationship implementation C#理解有关系实现C#
【发布时间】:2016-03-08 18:04:03
【问题描述】:

我的意思是,aPerson.PhoneNumber.Number 是一个字符串,所以它应该取字符串类型的值。

同样,在代码中,aPerson.PhoneNumber = phoneNumber aPerson.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);
    }

【问题讨论】:

    标签: c# associations relationship


    【解决方案1】:

    如果您希望 aPerson.PhoneNumber.Number = "Test Phone"; 像您的代码所示那样工作,您必须先初始化您的 aPerson.PhoneNumber

    这通常在 Person 类的构造函数中完成:

    public class Person
    {
        public Person()
        {
            this.PhoneNumber = new PersonPhoneNumber();
        }
    
        public string Name { get; set; }
        public PersonPhoneNumber PhoneNumber { get; set; }
    }
    

    免责声明:这只会解决您遇到的错误 - 一般而言,这不是一个好习惯。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-15
        • 2022-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多