三元运营商评估

时间:2018-01-05 12:15:13

标签: c#

我有以下代码:

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();
在代码决定哪条路由失效之前,

会被评估,这可能是导致此异常的原因?这是单线程代码。

pCodespoCodes都是ICollections

2 个答案:

答案 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