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
相关产品推荐
相关产品推荐

