繁体   English   中英

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

[英]Return null in case of empty object in C#

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

  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类中的代码来处理它。

Null和“空字符串”是两个不同的东西。 使用String.IsNullOrEmptyString.IsNullOrWhiteSpace检查。

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

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

检查您的括号。

如果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分配给已经为null的变量。

编辑:正如其他答案所说,您应该检查IsNullOrEmpty ,而不仅仅是等于null 您从string.Empty开始,但后来为它分配了null

在这种情况下, dt可能为null。 我将检查该对象是否实际具有值。 您将需要实例化dt ,然后可以设置dt.SSNstr的值。

根据您的修改,您可以像

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

var test =“”;

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

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM