我有以下代码:
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
根据条件的结果,仅评估两个操作数中的一个.
它仍然可能因某些原因而失败.
一个是i低于0,这将使第一个评估结果true.然后ElementAt会失败.另一个原因可能是pCodes在两个评估之间发生变化的多线程应用程序.
特定
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