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

使用三元运算符触发ArgumentOutOfRangeException,求排查原因

聊聊你遇到的ArgumentOutOfRangeException异常

首先直接给你吃个定心丸:C#里的三元条件运算符?:是短路执行的——它只会运行条件成立的那一侧代码,不会傻乎乎地两边都执行。所以你写的(i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();这一行,绝对不会在i >= pCodes.Count的时候去调用pCodes.ElementAt(i),这部分逻辑本身不会触发ArgumentOutOfRangeException。

那异常大概率出在别的地方,我们顺着你的代码逻辑捋一捋:

  • 你拿了两个集合的最大Count作为循环的上限,然后从最大值减一开始往回遍历
  • 处理pCodes的逻辑你已经做了判断,没问题;但别忘了你还有个poCodes集合——如果在你省略的//....代码块里,你同样用当前的i去访问poCodes.ElementAt(i),但此时i >= poCodes.Count的话,直接就会抛出这个异常
  • 另外还要提一句:ICollection本身没有索引器,你用的ElementAt是LINQ的扩展方法。不管你的集合是List<T>(实现了IList,直接用索引)还是HashSet<T>这类没实现IList的,只要i >= 集合.Count,ElementAt(i)都会抛出ArgumentOutOfRangeException,这点要注意

给你几个具体的排查方向:

  • 先检查循环里//....的代码,有没有访问poCodes.ElementAt(i)但没做i < poCodes.Count判断的地方
  • 虽然你说是单线程,但还是确认下:循环过程中pCodes或poCodes的Count会不会被其他隐性逻辑修改?比如有没有异步操作(哪怕单线程也可能有延迟执行的代码)或者集合本身是动态变化的?
  • 最简单的方法是加个日志,把每次循环的i值、pCodes.Count、poCodes.Count都打出来,异常触发时一看参数就知道哪里出问题了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:11