当前位置:  开发笔记 > 编程语言 > 正文

使用例如Linq-To-Xml时处理空引用

如何解决《使用例如Linq-To-Xml时处理空引用》经验,为你挑选了1个好方法。

是否有更好/更短的方式来处理(大量)空引用,例如当我使用LinqToXML时.

我为XElement编写了这个扩展,可以很好地处理它,但也许有另一种方法?

那个功能名称怎么样?"和"并不是真正具有描述性的.

public static class XmlExtentions
{
    public static T And(this T obj, Func action) where T : XElement
    {
        return obj == null ? obj : action(obj);
    }
}

internal class Program
{
    private static void Main()
    {
        //create example xml element
        var x = 
          XElement.Parse("my-name");

        //old way
        var test1 = x.Element("find");
        if (test1 != null) test1 = test1.Element("name");
        Console.WriteLine(test1);

        //using the extentions method
        var test2 = x.Element("find").And(findme => findme.Element("name"));
        Console.WriteLine(test2);

        Console.ReadLine();
    }
}

PS:我知道我可以在这个例子中使用XPath,但在更复杂的情况下并非总是如此.



1> Marc Gravell..:

整体方法是合理的 - 虽然我不确定Func哪个似乎有点限制.如果你限制返回相同的东西,我想知道是否只接受name(string)作为第二个arg会不会更容易?

重新命名 - 也许借用LINQ?这是essentaially a Select- 怎么样SelectOrDefault:

public static TResult SelectOrDefault(
    this TSource obj, Func selector) where TSource : class
{
    return SelectOrDefault(
        obj, selector, default(TResult));
}

public static TResult SelectOrDefault(
    this TSource obj, Func selector,
    TResult @default) where TSource : class
{
    return obj == null ? @default : selector(obj);
}

(编辑)可能与附加XElement具体:

public static XElement SelectOrDefault(
    this XElement element, XName name)
{
    return element == null ? null : element.Element(name);
}

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有