//---------------------------------------------------------------------------------------// // Public Interface //---------------------------------------------------------------------------------------// #region Public Interface /// <summary> /// Indexer that returns XAttribute wrapper by XNode /// </summary> /// <example> /// You have several choises how to deal with attributes. /// /// // 1 /// XElement element = new XElement("name", new XAttribute("attr", "val")); /// dynamic dynamicElement = element.AsDynamic(); /// string value = dynamicElement["attr"]; /// /// // 2 /// XElement element = new XElement("name", new XAttribute("attr", "val")); /// dynamic dynamicElement = element.AsDynamic(); /// XAttribute attribute = dynamicElement["attr"]; /// string value = attribute.Value; /// string theSameValue = (string)attribute; /// /// // 3 /// XElement element = new XElement("name", new XAttribute("attr", "val")); /// dynamic dynamicElement = element.AsDynamic(); /// string value = (string)dynamicElement["attr"]; /// </example> public dynamic this[XName name] { get { Contract.Requires(name != null); XAttribute attribute = element.Attribute(name); if (attribute == null) { throw new InvalidOperationException("Attribute not found. Name: " + name.LocalName); } return(attribute.AsDynamic()); } }