【问题标题】:Checking for Null values when accessing field values访问字段值时检查 Null 值
【发布时间】:2018-09-30 17:33:42
【问题描述】:

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

假设该项目是一个有效的 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

【问题讨论】:

标签: c#


【解决方案1】:

尝试使用空条件运算符。

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

示例: 如果属性为空:

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

如果项目为空:

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

或者同时检查

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

【讨论】:

【解决方案2】:

尝试使用三元条件运算符

Condition ? True : False

如果你是从数据库中检索数据,那么这个

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

如果仍然显示错误,则尝试将 ? 的数据类型设为 EntryID

public string? EntryID;

【讨论】:

  • public string? EntryID; 将显示错误。可空引用类型直到 C# 8 才会出现。而且我也相当肯定,当 item 为空或 item.EntryID 为空时,调用 item.EntryID.ToString() == DBNull 将失败。
  • 您似乎以不自然的方式混合了条件运算符和“if”语句。此外,根据项目的“ToString”比较项目是不好的做法,可能会导致误报,也许你的意思是item.EntityID == DBNull.Value
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多