访问字段值时检查空值

时间:2018-09-30 08:57:37

标签: c#

我正在尝试检查字段值是否为空。

假设该项目是有效的Outlook ContactItem,我认为以下代码将检查空值,如果相关字段为空,则返回“(Empty)”。

EntryID = item.EntryID.ToString() ?? "(nothing)";
Title = item.Title.ToString() ?? "(nothing)";
First_Name = item.FirstName.ToString() ?? "(nothing)";
Middle_Name = item.MiddleName.ToString() ?? "(nothing)";
Last_Name = item.LastName.ToString() ?? "(nothing)";
Suffix = item.Suffix.ToString() ?? "(nothing)";
Company = item.CompanyName.ToString() ?? "(nothing)";
Home_Phone = item.HomeTelephoneNumber.ToString() ?? "(nothing)";
Mobile_Phone = item.MobileTelephoneNumber.ToString() ?? "(nothing)";
FirstLastName= item.LastNameAndFirstName.ToString() ?? "(nothing)";

但是,在其他字段上发生的错误如下:

Object reference not set to an instance of an object. 

从严格意义上讲,该错误不是NullReferenceException-该错误与联系人字段有关,而不与ContactItem对象有关。

现在我可以说对了,错误实际上是在告诉我该字段实际上是一个对象,如果该对象确实包含文本,则会从ContactItem中删除该对象?

我试图通过在Outlook联系人中填充每个字段来减轻错误-错误不会引发-但是如果我删除字段内容(例如CompanyName),则该代码将在同一行上失败错误。

如果我是对的,那么在尝试获取字段内容之前如何检查对象是否存在?

MTIA

DWE

2 个答案:

答案 0 :(得分:6)

尝试使用空条件运算符。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators

示例: 如果Property为null:

EntryID = item.EntryID?.ToString() ?? "(nothing)";

如果项目为空:

EntryID = item?.EntryID.ToString() ?? "(nothing)";

或全部选中

EntryID = item?.EntryID?.ToString() ?? "(nothing)";

答案 1 :(得分:-2)

尝试使用三元条件运算符

Condition ? True : False

如果您要从数据库中检索数据,则此

if(item.EntryID.ToString() == DBNull) ? item.EntryID.ToString() : "(nothing)";

如果仍然显示错误,则尝试将放入EntryID的数据类型

public string? EntryID;