是否有更好/更短的方式来处理(大量)空引用,例如当我使用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(" "); //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(); } } my-name
PS:我知道我可以在这个例子中使用XPath,但在更复杂的情况下并非总是如此.
整体方法是合理的 - 虽然我不确定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); }