我有以下代码:

searchResults.SearchResultCollection.Add(
                new SearchResult()
                    {
                        Header =
                        HttpUtility.HtmlDecode(
                        htmlDocument.DocumentNode
                        .SelectSingleNode(initialXPath + "h3")
                        .InnerText),
                        Link = HttpUtility.HtmlDecode(
                        htmlDocument.DocumentNode
                        .SelectSingleNode(initialXPath + "div/cite")
                        .InnerText)
                    }
                );

有时 htmlDocument.DocumentNode.SelectSingleNode(....) 返回 null 并且我的应用程序因 NullReferenceException 而崩溃。当然,我可以编写代码来检查空引用的返回值,但是代码会过于冗长。什么是优雅的方式来做到这一点?

最佳答案

您可以在 XmlNode 上创建一个扩展方法,如下所示:

public static class ExtensionMethods
{
    public string GetNodeText(this XmlNode node, string xPath)
    {
        var childNode = node.SelectSingleNode(xPath);
        return (childNode == null)
            ? "" : childNode.InnerText;
    }
}

searchResults.SearchResultCollection.Add(
    new SearchResult()
        {
            Header = HttpUtility.HtmlDecode(
                    htmlDocument.DocumentNode.GetNodeText(initialXPath + "h3"),
            Link = HttpUtility.HtmlDecode(
                    htmlDocument.DocumentNode.GetNodeText(initialXPath + "div/cite")
        }
    );

就我个人而言,我可能只是把它搞砸并明确地进行空测试,不过:)

关于c# - 检查空引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2451516/

10-12 02:55