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

Xamarin.Forms项目try-catch无法捕获ArgumentOutOfRangeException异常求解

问题排查原因及解决方案

核心原因

System.ArgumentOutOfRangeException: StartIndex cannot be less than zero 异常并非你贴出的Navigation.PushAsync调用行直接抛出,int.Parse方法只会抛出FormatException、OverflowException或NullReferenceException,不会触发索引类异常,问题出在后续执行逻辑中:

  • 异常源头在你新实例化的QuestionPage内部,包括构造函数、OnAppearing生命周期方法、页面绑定渲染逻辑三个阶段。这类索引异常100%来自字符串处理操作:比如调用Substring、Remove时传入了负数起始索引,或是调用IndexOf查找不存在的字符得到返回值-1后,直接作为索引参数传入后续字符串操作,没有做非负校验。
  • 你当前的try-catch仅包裹了页面跳转的调用代码,无法捕获QuestionPage内部初始化、渲染阶段抛出的异常,因此就算加了捕获逻辑还是会触发崩溃。

校验逻辑漏洞

你提到已经校验过两个Picker非空,但校验逻辑存在覆盖不全的问题:

  • 仅校验了Picker控件本身非空,没有校验SelectedItem的实际输出值是否符合预期:如果Picker的ItemsSource绑定的是自定义类对象,默认ToString()返回的是类的全限定名而非你预期的数字字符串,后续如果有对该字符串做拆分、截断的逻辑,很容易触发索引越界。

排查方案

  1. 在QuestionPage的构造函数入口加断点,逐行调试构造、初始化阶段的所有代码,重点排查所有涉及字符串索引操作的逻辑
  2. 给QuestionPage的构造函数、OnAppearing方法单独添加try-catch块捕获异常,就能直接定位到具体的报错代码行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:06