Type DoGetType() { var pi = underlying_member as PropertyInfo; if (pi != null) { return(pi.PropertyType); } var ei = underlying_member as EventInfo; if (ei != null) { return(ei.EventHandlerType); } if (UnderlyingSetter != null) { return(UnderlyingSetter.GetParameters()[1].ParameterType); } if (UnderlyingGetter != null) { if (IsAttachable) { return(UnderlyingGetter.ReturnType); } else { return(UnderlyingGetter.GetParameters()[0].ParameterType); } } return(typeof(object)); }