即使找到nullException,也要继续运行代码

时间:2016-06-07 08:15:00

标签: asp.net xml vb.net exception null

我正在运行一个代码,我正在阅读XML文件并使用vb.net将其保存在本地变量中。

可悲的是,并非所有的XML都具有相同的结构,所以我遇到的问题是,如果我尝试映射的那些字段中的一个字段丢失,它将停止运行代码并提示错误

我想,如果某个字段不是基金,请将其保留为空并运行代码直到结束。

我尝试使用try和catch没有运气。

Var1 = xmlNode.SelectSingleNode("Test1").InnerText
Var2 = xmlNode.SelectSingleNode("Test2").Value
Var3 = xmlNode.SelectSingleNode("Test3").InnerText

现在,如果其中一个xml上缺少Var2,它将停止运行代码,即使存在也不会使用Var3。

谢谢

2 个答案:

答案 0 :(得分:3)

如果您使用的是Visual Studio 2015,则可以使用空传播运算符?

Var1 = xmlNode?.SelectSingleNode("Test1")?.InnerText
Var2 = xmlNode?.SelectSingleNode("Test2")?.Value
Var3 = xmlNode?.SelectSingleNode("Test3")?.InnerText

如果您使用较旧的东西,那么您将不得不这么做:

If xmlNode IsNot Nothing Then 
    Dim node = xmlNode.SelectSingleNode("Test1")
    If node IsNot Nothing then Var1 = node.InnerText
    node = xmlNode.SelectSingleNode("Test2")
    If node IsNot Nothing then Var1 = node.Value
    'etc.
End If

请注意,您可以使用Try...Catch执行此操作,但这将是丑陋的代码:

Try
    Var1 = xmlNode.SelectSingleNode("Test1").InnerText
Catch ex As Exception
     'ignore
End Try
Try
    Var2 = xmlNode.SelectSingleNode("Test2").Value
Catch ex As Exception
     'ignore
End Try
Try
    Var3 = xmlNode.SelectSingleNode("Test3").InnerText
Catch ex As Exception
     'ignore
End Try

所以如果你有很多这样的话,你最好将它包装在一个函数中:

Public Shared Function GetNodeInnerText(node as XmlNode, nodeName As String) As String
    If node Is Nothing Then Return ""
    Dim singleNode = node.SelectSingleValue(nodeName)
    If singleNode Is Nothing Then Return ""
    Return singleNode.InnerText
End Function

答案 1 :(得分:0)

您可以使用nuget package Monads.net。得到monad"可能"。 使用它:

var1 = xmlNode.SelectSingleNode("Test1").With(Function(c) c.InnerText)

在内部检查节点是否为空,如果不是,则返回InnerText,在另一种情况下返回null。