[英]How to handling null, blank or no Element found issues in Linq-To-Xml?
[英]Handling null references when using eg Linq-To-Xml
是否有更好/更短的方法來處理(大量)null 引用,例如當我使用 LinqToXML 時。
我為 XElement 編寫了這個擴展,它可以很好地處理它,但也許還有另一種方法?
那么 function 名稱呢? “和”並不是真正的描述性。
public static class XmlExtentions
{
public static T And<T>(this T obj, Func<T, T> 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("<root><find><name>my-name</name></find></root>");
//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,但在更復雜的情況下並非總是如此。
總體方法是合理的 - 盡管我不確定Func<T,T>
似乎有點限制。 如果您限制返回相同的內容,我想知道是否僅接受名稱( string
)作為第二個參數會不會更容易?
重新命名 - 也許是從 LINQ 借來的? 這本質上是一個Select
- SelectOrDefault
怎么樣:
public static TResult SelectOrDefault<TSource, TResult>(
this TSource obj, Func<TSource, TResult> selector) where TSource : class
{
return SelectOrDefault<TSource, TResult>(
obj, selector, default(TResult));
}
public static TResult SelectOrDefault<TSource, TResult>(
this TSource obj, Func<TSource, TResult> 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.