三元内部的空融合算子

Leo*_*ssi 1 c# ternary-operator null-coalescing-operator

我有这个C#代码:

data[j].Actual[0] = data[j].Actual.Count != 0 ? (data[j].Actual[0] ?? 0) : 0;
Run Code Online (Sandbox Code Playgroud)

我想要做的是检查计数是否为0,在这种情况下,变量的值应设置为0.

如果计数不同于0,我想检查null-coalescing运算符,如果该值存在,否则返回0.

我遇到的问题是我收到此错误消息:

指数超出范围.必须是非负数且小于集合的大小.参数名称:index

我的猜测是,即使data[j].Actual.Count为0时,结果也不是0,但它会尝试使用null-coalescing运算符执行某些操作.

有什么建议?

Mar*_*ell 5

我认为问题在于任务; 如果data[j].Actual是空的(列表/数组/其他),那么你不能只分配 data[j].Actual[0]任何东西.如果这是一个数组,则不能执行任何操作(除非创建新数组).如果这是一个列表,则需要.Add一个值.

我会简化代码:

var actual = data[j].Actual;
if (actual.Count == 0)
{
    actual.Add(0);
    // or if this is an array: data[j].Actual = new double?[] {0}; 
}
else if (actual[0] == null)
{
    actual[0] = 0;
}
Run Code Online (Sandbox Code Playgroud)

这不是一行,但很容易理解.