// Soft-Link: This method is referenced through reflection by
        // ExpressionUtilities.TryRewriteLambdaExpression.  Update that
        // file if the signature changes.
        //[SuppressMessage(FxCop.Category.Design, FxCop.Rule.ConsiderPassingBaseTypesAsParameters,
        //    Justification = "Generic needed for type inference")]
        public T GetValue <T>(InOutArgument <T> argument)
        {
            ThrowIfDisposed();

            if (argument == null)
            {
                throw FxTrace.Exception.ArgumentNull(nameof(argument));
            }

            argument.ThrowIfNotInTree();

            return(GetValueCore <T>(argument.RuntimeArgument));
        }
        //[SuppressMessage(FxCop.Category.Design, FxCop.Rule.ConsiderPassingBaseTypesAsParameters,
        //    Justification = "Generic needed for type inference")]
        public void SetValue <T>(InOutArgument <T> argument, T value)
        {
            ThrowIfDisposed();

            if (argument == null)
            {
                // We want to shortcut if the argument is null
                return;
            }

            argument.ThrowIfNotInTree();

            SetValueCore(argument.RuntimeArgument, value);
        }