XPathSelectElement 捕获空引用异常

Posted

技术标签:

【中文标题】XPathSelectElement 捕获空引用异常【英文标题】:XPathSelectElement catch null reference exception 【发布时间】:2021-04-04 23:21:28 【问题描述】:

我正在使用 XPathSelectElement 从 XML 文件中获取一些元素。当 XML 文件中存在这些元素时,它会起作用。如果所选元素不在 XML 中,它自然会引发“空引用”异常。这很好。我希望它能做到这一点。但是,如果 XPathSelectElement 为空,我希望能够捕获该异常并且不执行任何操作。

按预期工作的代码:

public void LoadBonusDescription()
        
            string Race = CharRaceSelector.Text;
            string bonus = RequirementsBox.Text;

            XDocument doc = XDocument.Load($"Gamepath");

            string description = (string)doc.XPathSelectElement($"//RaceID[@id='Race']/Bonus[@id='bonus']/Description").Value;
            //DescriptionBox is a listBox
            DescriptionBox.Text = description;

            
        

我尝试加入 if 声明,例如:

if (description == null)

    return;

else

    DescriptionBox.Text = description;

但它并没有命中那部分,并在此处的字符串变量赋值处抛出异常:

string description = (string)doc.XPathSelectElement($"//RaceID[@id='Race']/Bonus[@id='bonus']/Description").Value;

如何在变量赋值之前(或期间)捕获异常以运行if 语句?

如果我无法捕捉到它,有没有办法禁用DescriptionBox 列表框而不是将框中的文本变为灰色(就像DescriptionBox.Enabled = false; 一样)? 基本上我想阻止用户选择 XML 文件中不可用的项目。

【问题讨论】:

var descriptionElement = doc.XPathSelectElement($"//RaceID[@id='Race']/Bonus[@id='bonus']/Description"); if(description != null && description.Value != null) DescriptionBox.Text = description; 只需使用null conditional operator doc.XPathSelectElement($"...")?.Value; 或者只是在XElement 上使用explicit string cast 而不是明确获取Value(string)doc.XPathSelectElement($"..."); @dbc ``` var description = (string)doc.XPathSelectElement($"//RaceID[@id='Race']/Bonus[@id='bonus']/Description"); if (description == null) return; else DescriptionBox.Text = description; 完美运行!谢谢! 【参考方案1】:

添加:

var description = (string)doc.XPathSelectElement($"//RaceID[@id='Race']/Bonus[@id='bonus']/Description");

            if (description == null)
            
                return;
            
            else
            
                DescriptionBox.Text = description;
            

正如@dbc 建议的那样,它运行良好!

【讨论】:

以上是关于XPathSelectElement 捕获空引用异常的主要内容,如果未能解决你的问题,请参考以下文章

C++Lambda Expression 的学习笔记

Java异常

第十二章 重新抛出异常与异常链

捕获空指针异常是代码异味吗?

我无法捕获 FMDB 空结果集

java中String browser = request.getHeader("user-agent")报空指针异怎么解决