示例#1
0
        private void BuildCollectionHashing(List <Expression> expressions,
                                            List <ParameterExpression> variables,
                                            MemberExpression collMember,
                                            ParameterExpression hashVariable,
                                            Type itemType,
                                            int prime2)
        {
            var colhashVar  = Expression.Parameter(typeof(int));
            var currentItem = Expression.Parameter(itemType);

            variables.Add(colhashVar);

            expressions.Add(Expression.Assign(colhashVar, Expression.Constant(_configuration.ColPrime1, typeof(int))));

            expressions.Add(Expression.IfThen(
                                Expression.NotEqual(
                                    collMember,
                                    Expression.Default(collMember.Type)
                                    ),
                                collMember.ForEach(currentItem,
                                                   BuildItemHashing(currentItem, itemType, colhashVar, _configuration.ColPrime2)
                                                   )
                                ));

            expressions.Add(Expression.Assign(
                                hashVariable,
                                Expression.ExclusiveOr(
                                    Expression.Multiply(
                                        hashVariable,
                                        Expression.Constant(prime2, typeof(int))
                                        ),
                                    colhashVar
                                    )
                                ));
        }