如果C#中有空对象,则返回null

时间:2015-06-23 18:16:11

标签: c#

我尝试使用此语句来检查SSN是否为空,返回SSNstr中的值,否则返回null。但是当SSN为空时,这会返回错误Object reference not set to an instance of an object.

  Model.DocumentData dt = new Model.DocumentData();     
 dt.SSNstr = (dt.SSNstr == null ? null :(string)individual.XPathSelectElement("Individual/SSN")).Insert(5,"-").Insert(3,"-");

这是dt类:

      [DataMember]
      public string SSNstr = string.Empty;

请注意这里我知道如何检查空值但我喜欢在同一行代码中执行。 由于我有这么多字段需要检查,我更喜欢检查代码的一行或更改dt类中负责处理它的内容。

5 个答案:

答案 0 :(得分:7)

空和“空字符串”是两个不同的东西。使用String.IsNullOrEmptyString.IsNullOrWhiteSpace进行核对。

最后,XPath查询的结果可能为空。你为什么不把它分成几行?

附录:看起来你的XPath查询结果看起来是空的。你正在假设它不会是空的。你有这个保证吗?当你编程时,不要相信任何人。包括你自己。

答案 1 :(得分:2)

检查您的括号。

如果dt.SSNstrnull,则表达式不会返回null,而是返回(null).Insert(5,"-").Insert(3,"-"),这会导致错误。您无法在null中插入任何内容。

一种解决方案是写

dt.SSNstr = dt.SSNstr == null ? null :(string)individual.XPathSelectElement("Individual/SSN").Insert(5,"-").Insert(3,"-");

但是如果有更好的话

if (dt.SSNstr!=null)
  dt.SSNstr =(string)individual.XPathSelectElement("Individual/SSN").Insert(5,"-").Insert(3,"-");

否则,您将null赋给已经为空的变量。

修改:正如其他答案所说,您应该检查IsNullOrEmpty,而不仅仅是null。您从string.Empty开始,但稍后您将null分配给它。

答案 2 :(得分:1)

在这种情况下,

dt可能为null。我会检查该对象是否确实有值。您需要实例化dt,然后才能设置dt.SSNstr的值。

答案 3 :(得分:1)

根据您的编辑,您可以像

一样
    dt.SSNstr = ((individual.XPathSelectElement("Individual/SSN") as string) == null) ? null : (individual.XPathSelectElement("Individual/SSN") as string).Insert(5,"-").Insert(3,"-");

答案 4 :(得分:1)

var test =“”;

var a = string.IsNullOrEmpty(test)? null:test;

我希望它有助于。