[英]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.IsNullOrEmpty
或String.IsNullOrWhiteSpace
检查。
最后,您的XPath查询结果可能为空。 你为什么不把它分成几行?
附录:确实看起来您的XPath查询结果为空。 您正在假设它不会为空。 你有那个保证吗? 当您编程时,不要信任任何人。 包括你自己。
检查您的括号。
如果dt.SSNstr
为null
,则表达式不返回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.