You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C#中调用p.Paddress.Street赋值时会报NullReferenceException空引用错误?

错误原因

System.NullReferenceException是C#开发中非常典型的空引用异常,你这次报错的直接原因是:
Address和PhoneNumber都属于引用类型,C#中所有引用类型的默认值为null,也就是没有指向任何实际存在的对象实例。你执行p.Paddress.Street = Console.ReadLine()时,p实例本身已经创建完成,但它的Paddress属性还没有被赋值为实际的Address类实例,仍然是null,访问空引用的子属性就会触发该异常。同理后续的Paddress其他属性、HomeNumber、MobileNumber的属性访问也会抛出同样的错误。

结合你提供的代码逻辑来看,问题根源是你在调用Add方法之前,实例化Patient对象时,给构造函数的paddress、homenumber、mobilenumber三个参数传入了null,导致Patient对应的三个属性都为空。

解决方案

可以根据你的业务逻辑任选一种即可:

  • 方案1:实例化Patient传参时,直接新建对应空实例传入
// 调用Add方法前创建Patient的示例代码
var newPatient = new Patient("", "", ' ', ' ', DateTime.Now, 0, new Address(), new PhoneNumber(), new PhoneNumber());
Add(newPatient);
  • 方案2:在Patient构造函数中增加空保护,避免外部传空导致属性为空
public Patient(string first, string last, char gender, char married, DateTime dob, decimal money, Address paddress, PhoneNumber homenumber, PhoneNumber mobilenumber)
{
    FirstName = first;
    LastName = last;
    Gender = gender;
    Married = married;
    DateOfBirth = dob;
    Expenses = money;
    // 空校验:如果传入参数为null则自动初始化实例
    Paddress = paddress ?? new Address();
    HomeNumber = homenumber ?? new PhoneNumber();
    MobileNumber = mobilenumber ?? new PhoneNumber();
}
  • 方案3:在Add方法填充地址、手机号属性前,先完成实例初始化
// 放在Add方法最开头,或者放在填充地址相关属性的代码之前即可
p.Paddress ??= new Address();
p.HomeNumber ??= new PhoneNumber();
p.MobileNumber ??= new PhoneNumber();

内容的提问来源于stack exchange,提问作者MusicCodeMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:03