我已经阅读了有关Stack Overflow的几篇文章和问题,但仍然看不出我做错了什么.不使用C#6 - 抱歉一开始没有发布.VS 2013.
此代码有效:
if (row.Cells["CSR_Notes"].Value != null)
{
deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效:
deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value != null
? row.Cells["CSR_Notes"].Value.ToString() : "";
Run Code Online (Sandbox Code Playgroud)
但是如果值为null,则此代码会抛出"Object reference not set ..."错误.
deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value.ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
问题是Value是潜在的null属性.通过对其调用ToString()方法,您将在空合并运算符有机会使用之前创建Null引用异常.您可以使用C#6中的Null Propagating Operation来解决这个问题,如下所示:
deliveryEvent.CSR_Notes = row.Cells["CSR_Notes"].Value?.ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
请注意?价值之后.这是Null Propagating运算符.如果Value为null,它将通过表达式的其余部分传递null,然后将正确触发Null Coalescing Operator(??).
C#5的解决方案是将合并推高一点,就像haim770的回答一样.
deliveryEvent.CSR_Notes = (rows.Cells["CSR_Notes"].Value ?? "").ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |