예제 #1
0
        public static bool TryFindArgumentFilterWithin(Expression expression, out IArgumentFilter argumentFilter)
        {
            Debug.Assert(expression != null);

            var visitor = new ArgumentFilterVisitor();
            visitor.Visit(expression);
            argumentFilter = visitor.argumentFilter;
            return argumentFilter != null;
        }
예제 #2
0
        public static bool TryFindArgumentFilterWithin(Expression expression, out IArgumentFilter argumentFilter)
        {
            Debug.Assert(expression != null);

            var visitor = new ArgumentFilterVisitor();

            visitor.Visit(expression);
            argumentFilter = visitor.argumentFilter;
            return(argumentFilter != null);
        }
예제 #3
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            this.argumentFilters = new ArgumentFilterCollection();
            var methodParameters = node.Method.GetParameters();

            for (var i = 0; i < methodParameters.Length; ++i)
            {
                if (methodParameters[i].ParameterType.IsByRef || methodParameters[i].IsOut)
                {
                    this.argumentFilters.Add(IsAnyArgumentFilter <object> .Instance);
                }
                else
                {
                    this.argumentFilters.Add(ArgumentFilterVisitor.FindArgumentFilterWithin(node.Arguments[i]));
                }
            }

            return(Expression.Constant(this.argumentFilters));
        }