Observable.HandleMethodCall C# (CSharp) Method

HandleMethodCall() private method

private HandleMethodCall ( IMethodCallMessage methodCall ) : IMessage
methodCall IMethodCallMessage
return IMessage
        IMessage HandleMethodCall(IMethodCallMessage methodCall)
        {
            var isPropertySetterCall = methodCall.MethodName.StartsWith("set_");
            var propertyName = isPropertySetterCall ? methodCall.MethodName.Substring(4) : null;
            if (isPropertySetterCall)
            {
                OnPropertyChanging(propertyName);
            }
            try
            {
                object methodCalltarget = target;
                if (methodCall.MethodName == "add_PropertyChanged" || methodCall.MethodName == "remove_PropertyChanged"||
                    methodCall.MethodName == "add_PropertyChanging" || methodCall.MethodName == "remove_PropertyChanging")
                {
                    methodCalltarget = this;
                }
                var result = methodCall.MethodBase.Invoke(methodCalltarget, methodCall.InArgs);
                if (isPropertySetterCall)
                {
                    OnPropertyChanged(methodCall.MethodName.Substring(4));
                }
                return new ReturnMessage(result, null, 0, methodCall.LogicalCallContext, methodCall);
            }
            catch (TargetInvocationException invocationException)
            {
                var exception = invocationException.InnerException;
                return new ReturnMessage(exception, methodCall);
            }
        }
        protected virtual void OnPropertyChanged(string propertyName)