Je voudrais créer une méthode qui accepte une Expression<Func>
et en crée l’inverse logique (c.-à-d. Qu’elle renvoie false
où elle aurait été true
, et inversement. C’est beaucoup plus difficile que je ne le pensais C’est là que je suis en train de:
public static Expression<Func> Not(this Expression<Func> expression) { return Expression.Lambda<Func>(Expression.Not(expression.Body)); }
Ceci comstack bien mais lève l’exception suivante lorsqu’elle est appelée:
Test method Tests.Common.Unit.LinqPredicateBuilderTests.CanInverseAPredicate threw exception: System.ArgumentException: Incorrect number of parameters supplied for lambda declaration
Je n’ai aucune idée de ce que je fais. Quelqu’un pourrait-il remplir les blancs?
Vous appelez Expression.Lambda
pour créer une expression sans aucun paramètre, alors que vous devez transférer le paramètre unique de l’expression source.
Notez que nous essayons de créer une Expression
et non une Expression
.
Essayez ceci à la place:
return Expression.Lambda>(Expression.Not(expression.Body), expression.Parameters);