我尝试使用此语句来检查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类中负责处理它的内容。
答案 0 :(得分:7)
空和“空字符串”是两个不同的东西。使用String.IsNullOrEmpty
或String.IsNullOrWhiteSpace
进行核对。
最后,XPath查询的结果可能为空。你为什么不把它分成几行?
附录:看起来你的XPath查询结果看起来是空的。你正在假设它不会是空的。你有这个保证吗?当你编程时,不要相信任何人。包括你自己。
答案 1 :(得分:2)
检查您的括号。
如果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赋给已经为空的变量。
修改:正如其他答案所说,您应该检查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;
我希望它有助于。