Exemple #1
0
 private static BinaryExpression CallComparerIfAvailable(Expression comparers, Type memberType, Expression xPropertyOrField, Expression yPropertyOrField)
 {
     //(comparers.ContainsKey(memberType) && ((IEqualityComparer<memberType>)comparers[memberType]).Equals(x, y))
     return(BinaryExpression.AndAlso(
                Expression.Call(comparers, "ContainsKey", null, Expression.Constant(memberType, typeof(Type))),
                Expression.Call(Expression.TypeAs(
                                    Expression.MakeIndex(comparers, typeof(IDictionary <Type, IEqualityComparer>).GetProperty("Item", typeof(IEqualityComparer), new[] { typeof(Type) }), new[] { Expression.Constant(memberType, typeof(Type)) }),
                                    typeof(IEqualityComparer <>).MakeGenericType(memberType)), "Equals", null, xPropertyOrField, yPropertyOrField)));
 }