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 operatordoc.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 捕获空引用异常的主要内容,如果未能解决你的问题,请参考以下文章
java中String browser = request.getHeader("user-agent")报空指针异怎么解决