三元运营商评估

Ale*_*lex 0 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();
    //....
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我得到了一个ArgumentOutOfRangeException,我想知道它是否可能是由具有三元表达式的代码行引起的?这是来自客户端的电子邮件异常,所以现在它就是我的全部.

我想知道整个这个表达式:

var code = (i < pCodes.Count) ? pCodes.ElementAt(i) : new pCodeDto();
Run Code Online (Sandbox Code Playgroud)

在代码决定哪条路由发生故障之前得到评估,这可能是导致此异常的原因?这是单线程代码.

pCodes并且poCodes都是ICollections

Pat*_*man 9

根据条件的结果,仅评估两个操作数中的一个.

它仍然可能因某些原因而失败.

一个是i低于0,这将使第一个评估结果true.然后ElementAt会失败.另一个原因可能是pCodes在两个评估之间发生变化的多线程应用程序.


Ber*_*ken 5

特定

condition ? expression-if-true : expression-if-false
Run Code Online (Sandbox Code Playgroud)

根据C#语言参考,评估条件,然后评估两个表达式中的一个(不是两个).

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator