簡體   English   中英

C#麻煩得到一個空coalescing運算符? 上班

[英]c# trouble getting a null-coalescing operator ?? to work

我已經閱讀了幾篇關於堆棧溢出的文章和問題,但仍然看不到我在做什么錯。 沒有使用C#6-抱歉,一開始沒有發布。 VS 2013。

此代碼有效:

if (row.Cells["CSR_Notes"].Value != null)
                    {
                    deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value.ToString();
                    }

此代碼有效:

 deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value != null 
                        ? row.Cells["CSR_Notes"].Value.ToString() : "";

但是,如果該值為null,則此代碼將引發“未設置對象引用...”錯誤。

 deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value.ToString() ?? "";

我想念什么?

問題在於Value是可能為null的屬性。 通過在其上調用ToString()方法,可以在使用空合並運算符之前創建Null Reference Exception。 您可以使用C#6中的Null傳播操作來解決此問題,如下所示:

deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value?.ToString() ?? "";

注意? 價值之后。 這是Null傳播運算符。 如果Value為null,它將在表達式的其余部分傳遞null,然后將正確觸發Null合並運算符(??)。

正如haim770的回答一樣,C#5解決方案是將合並工作稍微提高一點。

deliveryEvent.CSR_Notes = (rows.Cells["CSR_Notes"].Value ?? "").ToString();

您需要檢查row.Cells["CSR_Notes"]對象是否不為空,但是您的最后一個代碼段是檢查整個表達式row.Cells["CSR_Notes"].Value.ToString()的返回值,並通過進行評估時,它會正確拋出,因為row.Cells["CSR_Notes"]返回null

嘗試以下方法:

deliveryEvent.CSR_Notes = (row.Cells["CSR_Notes"].Value ?? "").ToString();

參見MSDN

您正在對null的對象調用.ToString() 這就是為什么您收到錯誤。 這是一個簡單的復制:

MyObject obj = null;
string result = obj.ToString();

您可以通過使用空條件運算符(有時稱為“ elvis運算符”)來避免這種情況

deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value?.ToString() ?? "";

如果Value不為null,則只會在Value上調用.ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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