我有以下代码。
XElement opCoOptOff = doc.Descendants(ns + "OpCoOptOff").FirstOrDefault();
String opCo = opCoOptOff.Element(ns + "strOpCo").Value;
现在,如果我返回的元素为null,我得到一个NullReferenceException,因为XElement为null。所以我将其更改为以下内容。
String opCo = opCoOptOff.Element(ns + "strOpCo").Value;
if(opCoOptOff != null)
{
String opCo = opCoOptOff.Element(ns + "strOpCo").Value;
我希望必须有一种更优雅的方式来实现这一点,因为这种情况经常出现,我希望每次出现问题时都避免进行此类检查。非常感谢任何帮助
答案 0 :(得分:2)
你可以写一个extension method
并在任何地方使用它:
public static class XDocumentExtension
{
public static string GetSubElementValue(this XElement element, string item)
{
if(element != null && element.Value != null)
{
if (element.Element(item) != null)
{
return element.Element(item).Value;
}
}
return null;
}
public static XElement GetElement(this XElement element, string item)
{
if (element != null)
return element.Element(item);
return null;
}
public static XElement GetElement(this XDocument document, string item)
{
if (document != null)
return document.Descendants("item").FirstOrDefault();
return null;
}
}
将其用作:
String opCo = opCoOptOff.Element(ns + "strOpCo").GetSubElementValue(ns + "strOpCo");
您也可以为您的目的添加其他扩展程序。
编辑:我更新了答案,但如果您在写作之前仔细阅读,可以add other extensions for your purpose.
我写了这个因为我猜您可能想要调用null对象元素,我不知道你的确切情况,但是我添加了一些代码以便进一步澄清,完全根据你的情况完成XDocumentExtension类,并且一个注释扩展方法可以处理null对象。
答案 1 :(得分:1)
您实际上可以将XElement直接转换为字符串: http://msdn.microsoft.com/en-us/library/bb155263.aspx
所以
String opCo = opCoOptOff.Element(ns + "strOpCo").Value;
可能是
string opCo = (string) opCoOptOff.Element(ns + "strOpCo");