我有以下代码:
var maxCodes = Math.Max(pCodes.Count, poCodes.Count);
for (var i = maxCodes - 1; i > -1; i--)
{
var code = (i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();
//....
}
我的问题是我收到了ArgumentOutOfRangeException
,我想知道它是否可能是由带有三元表达式的代码行引起的?这是来自客户端的电子邮件异常,所以现在就是我的全部。
我想知道整个这个表达式是什么:
var code = (i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();
在代码决定哪条路由失效之前,会被评估,这可能是导致此异常的原因?这是单线程代码。
pCodes
和poCodes
都是ICollections
答案 0 :(得分:9)
根据条件的结果,仅评估两个操作数中的一个。
由于某些原因,它仍然可能失败。
一个是i
低于0
,这会使第一个评估结果为true
。然后ElementAt
将失败。
另一个原因可能是多线程应用程序在两次评估之间更改pCodes
。
答案 1 :(得分:5)
给出
condition ? expression-if-true : expression-if-false
根据C#语言参考,评估条件,然后评估两个表达式中的一个(不是两个)。
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator