我有这个C#代码:
data[j].Actual[0] = data[j].Actual.Count != 0 ? (data[j].Actual[0] ?? 0) : 0;
我想要做的是检查计数是否为0,在这种情况下,变量的值应该设置为0。
如果count不同于0,我想用null-coalescing运算符检查该值是否存在,否则返回0。
我遇到的问题是我收到此错误消息:
指数超出范围。必须是非负数且小于 集合。参数名称:index
我的猜测是,即使data[j].Actual.Count
为0,它也不会将结果设为0,但会尝试使用空合并运算符执行某些操作。
有什么建议吗?
答案 0 :(得分: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;
}
这不是一行,但很容易理解。
答案 1 :(得分:3)
仔细看看
data[j].Actual[0] = data[j].Actual.Count != 0 ? (data[j].Actual[0] ?? 0) : 0;
您要分配给Actual[0]
。如果Actual.Count
为0,则超出范围异常。你不能使用三元。使用if语句。
if(data[j].Actual.Count != 0)
{
data[j].Actual[0] = data[j].Actual[0] ?? 0;
}
// else you don't need to set anything because there is nothing to set!