C# 选择SingleNode.value未找到时分配string.empty

C# 选择SingleNode.value未找到时分配string.empty,c#,.net,xpath,C#,.net,Xpath,我将一些参数传递给Web服务,并使用XmlDoc.SelectSingleNode(“//Parameter/LastName”).Value等从XML文档中解析它。问题是如果节点没有值,我会得到一个对象引用异常。我仍然需要将其作为string.empty参数传递给我的web服务。我知道我需要处理这个异常,但有没有一种方法可以在一行中完成。比如说 string/variable lname = payloadXmlDoc.SelectSingleNode("//Parameter/LastNam

我将一些参数传递给Web服务,并使用
XmlDoc.SelectSingleNode(“//Parameter/LastName”).Value
等从XML文档中解析它。问题是如果节点没有值,我会得到一个对象引用异常。我仍然需要将其作为string.empty参数传递给我的web服务。我知道我需要处理这个异常,但有没有一种方法可以在一行中完成。比如说

string/variable lname = payloadXmlDoc.SelectSingleNode("//Parameter/LastName").Value ?? "";
xslt模板

    <xsl:element name="ssn">
                <xsl:choose>
                  <xsl:when test="count(//Transaction/Parameter[@Name='LastName'])>0">
                     <xsl:value-of select="//Transaction/Parameter[@Name='LastName']/@Value"/>
                   </xsl:when>
                 <xsl:otherwise>
                    <xsl:text></xsl:text>
                 </xsl:otherwise>
              </xsl:choose>
            </xsl:element>

你很接近!如果找不到节点,
SelectSingleNode()
调用将返回
null
,因此对其调用
.Value
将抛出
NullReferenceException
。但是,您可以使用(
?。
)转发
null
,以便null合并运算符(
)将看到
null
,并返回空字符串。因此,您的第一行将如下所示:

payloadXmlDoc.SelectSingleNode("//Parameter/LastName")?.Value ?? "";
因此,如果找不到节点,则不调用
.Value
,而是使用
null
,因此
??
将看到
null
并返回空字符串。

awesome:-)。谢谢我现在是安全导航操作员的粉丝。
payloadXmlDoc.SelectSingleNode("//Parameter/LastName")?.Value ?? "";