IronRuby.Runtime.Calls.MetaObjectBuilder.AddSplattedArgumentTest C# (CSharp) Méthode

AddSplattedArgumentTest() private méthode

private AddSplattedArgumentTest ( IList value, Expression expression, int &listLength, System.Linq.Expressions.ParameterExpression &listVariable ) : void
value IList
expression Expression
listLength int
listVariable System.Linq.Expressions.ParameterExpression
Résultat void
        internal void AddSplattedArgumentTest(IList/*!*/ value, Expression/*!*/ expression, out int listLength, out ParameterExpression/*!*/ listVariable) {
            Expression assignment;
            listVariable = expression as ParameterExpression;
            if (listVariable != null && typeof(IList).IsAssignableFrom(expression.Type)) {
                assignment = expression;
            } else {
                listVariable = GetTemporary(typeof(IList), "#list");
                assignment = Ast.Assign(listVariable, AstUtils.Convert(expression, typeof(IList)));
            }
            
            listLength = value.Count;
            AddCondition(Ast.Equal(Ast.Property(assignment, typeof(ICollection).GetProperty("Count")), AstUtils.Constant(value.Count)));
        }

Usage Example

Exemple #1
0
        public void AddSplatted(MetaObjectBuilder /*!*/ metaBuilder, CallArguments /*!*/ args)
        {
            var arg       = args.GetSplattedArgument();
            var parameter = args.GetSplattedArgumentExpression();

            int listLength;
            ParameterExpression listVariable;

            if (metaBuilder.AddSplattedArgumentTest(arg, parameter, out listLength, out listVariable))
            {
                if (listLength > 0)
                {
                    for (int i = 0; i < listLength; i++)
                    {
                        Add(
                            Ast.Call(
                                listVariable,
                                typeof(List <object>).GetMethod("get_Item"),
                                Ast.Constant(i)
                                )
                            );
                    }
                }
            }
            else
            {
                // argument is not an array => add the argument itself:
                Add(parameter);
            }
        }
All Usage Examples Of IronRuby.Runtime.Calls.MetaObjectBuilder::AddSplattedArgumentTest