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

Xamarin.Forms中导航至新页面时触发System.NullReferenceException异常求助

解决System.NullReferenceException:Object reference not set to an instance of an object

嘿,我来帮你搞定这个空引用异常的问题!这个错误的核心原因很清晰——你在转换选中项的时候出了问题,导致ProfileInfo变成了null,之后访问它的属性自然就炸了。

问题根源

e.CurrentSelection在大多数UI框架(比如MAUI、Xamarin)里是一个集合类型(比如IEnumerable),而不是单个Profile对象。你直接用as Profile去转换整个集合,肯定会得到null,后续访问ProfileInfo.Name这类属性时就触发了空引用异常。

修正后的代码

我给你调整了代码,加上了正确的选中项获取逻辑和空值检查:

public void Profile_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // 从选中集合中筛选出第一个有效的Profile对象
    var ProfileInfo = e.CurrentSelection.OfType<Profile>().FirstOrDefault();
    
    // 必须先检查是否获取到了有效的实例
    if (ProfileInfo != null)
    {
        Application.Current.MainPage = new DistributorInfoPage(ProfileInfo.Name, ProfileInfo.Location, ProfileInfo.Image);
    }
    else
    {
        // 可选:处理未选中有效项的场景,比如给用户提示
        // 示例:await Application.Current.MainPage.DisplayAlert("提示", "请选择一个有效的Profile", "确定");
    }
}

关键改进点说明

  • OfType<Profile>():过滤掉选中集合里所有不是Profile类型的元素,避免类型转换错误
  • FirstOrDefault():返回集合里第一个匹配的Profile对象,如果没有匹配项就返回null,不会抛出异常
  • 新增的null检查:确保只有当ProfileInfo是有效实例时,才执行页面跳转操作,从根源上避免空引用

额外排查点(如果问题还存在)

如果修改后还是有问题,可以检查:

  • Profile类的Name、Location、Image属性是否在初始化时被正确赋值,有没有可能这些属性本身是null
  • 确认你的选择控件绑定的数据源确实是Profile类型的集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:28:12