Example #1
0
        private Expression <Func <T, T, bool> > CreateEquals()
        {
            var x = Expression.Parameter(Type);
            var y = Expression.Parameter(Type);

            List <Expression> list = new List <Expression>();
            var exitPoint          = Expression.Label(typeof(bool));

            var body   = EqualityComparerHelper.CreateEqualsBody(x, y, CompareOptions, MembersOrder);
            var lambda = Expression.Lambda <Func <T, T, bool> >(body, x, y);

            return(lambda);
        }
        private Expression <Func <IData, IData, bool> > CreateEqualsMethod()
        {
            var x      = Expression.Parameter(typeof(IData));
            var y      = Expression.Parameter(typeof(IData));
            var xValue = Expression.Variable(Type);
            var yValue = Expression.Variable(Type);

            var dataType = typeof(Data <>).MakeGenericType(Type);

            var body = Expression.Block(typeof(bool), new ParameterExpression[] { xValue, yValue },
                                        Expression.Assign(xValue, Expression.Convert(x, dataType).Value()),
                                        Expression.Assign(yValue, Expression.Convert(y, dataType).Value()),
                                        EqualityComparerHelper.CreateEqualsBody(xValue, yValue, CompareOptions, MembersOrder)
                                        );
            var lambda = Expression.Lambda <Func <IData, IData, bool> >(body, x, y);

            return(lambda);
        }