ソースコード
using System; using System.Collections.Generic; using System.Xml; public static class XmlExt { public static IEnumerable<T> Select<T> ( this XmlNodeList self, Func<XmlNode, T> selector ) { foreach ( XmlNode n in self ) { yield return selector( n ); } } public static IEnumerable<T> Select<T> ( this XmlNodeList self, Func<XmlNode, int, T> selector ) { var index = 0; foreach ( XmlNode n in self ) { yield return selector( n, index++ ); } } public static IEnumerable<XmlNode> Where ( this XmlNodeList self, Func<XmlNode, bool> predicate ) { foreach ( XmlNode n in self ) { if ( predicate( n ) ) { yield return n; } } } public static IEnumerable<XmlNode> Where ( this XmlNodeList self, Func<XmlNode, int, bool> predicate ) { var index = 0; foreach ( XmlNode n in self ) { if ( predicate( n, index++ ) ) { yield return n; } } } public static XmlNode First( this XmlNodeList self ) { return self[ 0 ]; } public static XmlNode First ( this XmlNodeList self, Func<XmlNode, bool> predicate ) { foreach ( XmlNode n in self ) { if ( predicate( n ) ) { return n; } } throw new InvalidOperationException(); } public static XmlNode FirstOrDefault( this XmlNodeList self ) { return 0 < self.Count ? self[ 0 ] : null; } public static XmlNode FirstOrDefault ( this XmlNodeList self, Func<XmlNode, bool> predicate ) { foreach ( XmlNode n in self ) { if ( predicate( n ) ) { return n; } } return null; } }