[英]Null-coalescing operator inside ternary
我有這個C#代碼:
data[j].Actual[0] = data[j].Actual.Count != 0 ? (data[j].Actual[0] ?? 0) : 0;
我要檢查的是計數是否為0,在這種情況下,變量的值應設置為0。
如果計數不同為0,我想使用null運算符檢查該值是否存在,否則返回0。
我的問題是,我收到此錯誤消息:
索引超出范圍。 必須為非負數並且小於集合的大小。 參數名稱:索引
我的猜測是,即使data[j].Actual.Count
為0時,結果也不會為0,但它會嘗試使用null-coalescing運算符進行處理。
有什么建議么?
我認為問題在於任務。 如果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;
}
這不是一行,但是很容易理解。
仔細地看
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!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.