CerealBox.DynamicXml.TryGetMember C# (CSharp) Method

TryGetMember() public method

public TryGetMember ( GetMemberBinder binder, object &result ) : bool
binder System.Dynamic.GetMemberBinder
result object
return bool
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName())
                return true;

            var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name);
            if (xElements.Count() == 1)
            {
                var element = xElements.First();
                ConvertAttributesToElements(element);
                var childElements = element.Elements().Select(x => x.DynamicCompatableName());
                if (childElements.Count() > 1 && childElements.Distinct().Count() == 1)
                {
                    result = element.Elements().Select(x => new DynamicXml(x)).ToArray();
                }
                else
                    result = new DynamicXml(element);
            }
            else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName())
                result = this;
            else
                result = xElements.Select(x => new DynamicXml(x)).ToArray();
            return true;
        }