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

Xamarin Forms视图间传值问题:赋值ObservableCollection遇空引用异常

解决Xamarin Forms中赋值ObservableCollection时的NullReferenceException问题

嘿,我来帮你搞定这个空引用异常的问题!你遇到的System.NullReferenceException本质上是因为你在尝试访问一个未初始化的对象,具体到你的场景,大概率是下面两个原因之一:

可能的原因

  • myMeeting对象未实例化:在执行myMeeting.MeetingInvitees = _myMeetingInvitees;之前,myMeeting还是null,没有通过new Meeting()创建实例。
  • Meeting类的MeetingInvitees属性未初始化:Meeting类里的MeetingInvitees这个ObservableCollection字段/属性没有预先创建实例,本身就是null,导致赋值时出错。

分步解决方案

1. 确保myMeeting已正确实例化

在给myMeeting的属性赋值前,必须先创建它的实例。比如在构造函数里:

public YourPage() // 假设这是你的页面构造函数
{
    InitializeComponent();
    
    // 先实例化myMeeting,这一步不能少!
    var myMeeting = new Meeting();
    
    // 现在再赋值就不会触发空引用异常了
    myMeeting.MeetingInvitees = _myMeetingInvitees;
}

2. 确保Meeting类的MeetingInvitees已初始化

修改你的Meeting类,在声明属性时或者类的构造函数里初始化MeetingInvitees,避免它为null:

public class Meeting
{
    // 方式一:声明属性时直接初始化(推荐,更简洁)
    public ObservableCollection<Invitee> MeetingInvitees { get; set; } = new ObservableCollection<Invitee>();

    // 方式二:在类的构造函数里初始化
    // public Meeting()
    // {
    //     MeetingInvitees = new ObservableCollection<Invitee>();
    // }
}

3. 可选:合并集合内容而非替换引用

如果你不想直接替换MeetingInvitees的引用(比如原来的集合已经绑定到UI,替换后可能导致绑定失效),可以选择合并内容:

// 先清空原有邀请者
myMeeting.MeetingInvitees.Clear();
// 逐个添加新的邀请者
foreach (var invitee in _myMeetingInvitees)
{
    myMeeting.MeetingInvitees.Add(invitee);
}

排查小贴士

遇到空引用异常时,可以用调试工具检查:

  • myMeeting是否为null
  • myMeeting.MeetingInvitees是否为null
    找到哪个对象是null,针对性初始化就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:51:34