public object GetProperty(string name, out bool isCacheable, params object[] args) { isCacheable = false; DispatchMember member = null; if (args.Length < 1) { // some objects crash on attempt to retrieve a method as a property member = GetMembers().FirstOrDefault(testMember => testMember.Name == name); if ((member != null) && member.DispatchFlags == DispatchFlags.Method) { return(new HostMethod(hostItem, name)); } } try { var result = dispatch.GetProperty(name, args); return(result); } catch (Exception) { if (args.Length < 1) { if (member == null) { member = GetMembers().FirstOrDefault(testMember => testMember.Name == name); } if ((member != null) && !member.DispatchFlags.HasFlag(DispatchFlags.Method)) { return(new HostIndexedProperty(hostItem, name)); } return(new HostMethod(hostItem, name)); } throw; } }
public static DispatchMember Merge(int dispid, IEnumerable <DispatchMember> group) { var members = group.ToArray(); if (members.Length < 1) { return(null); } var result = new DispatchMember(members[0].Name, dispid); foreach (var member in members) { Debug.Assert(member.Name == result.Name); Debug.Assert(member.DispID == result.DispID); result.DispatchFlags |= member.DispatchFlags; } return(result); }