簡體   English   中英

三元內的空推算運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM