2009-10-12 7 views
0

J'ai une question assez simple que je ne peux pas comprendre.Comment obtenir le corps d'un prédicat?

Le code de la méthode est simple:

protected void Require<TValidator, TParam>(TValidator validator, Expression<Func<TValidator, TParam>> property, Predicate<TParam> predicate) 
{ 
    var propertyValue = property.Compile().Invoke(validator); 
    if(!predicate.Invoke(propertyValue)) 
     throw new ValidatorInitializationException("Error while initializing validator", GetType()); 
} 

Le problème est que je voudrais emballer plus d'informations dans le message d'erreur. Obtenir des informations sur l'expression est facile. Mais comment puis-je obtenir une représentation sous forme de chaîne "user friendly" du prédicat?

Répondre

2

Il faudrait accepter que comme un arbre d'expression aussi:

protected void Require<TValidator, TParam>(
    TValidator validator, 
    Expression<Func<TValidator, TParam>> property, 
    Expression<Predicate<TParam>> predicateExpression) 
{ 
    var propertyValue = property.Compile().Invoke(validator); 
    Predicat<TParam> predicate = predicateExpression.Compile();   
    if(!predicate.Invoke(propertyValue)) 
    {  
     throw new ValidatorInitializationException(
      "Error while initializing validator: " + predicateExpression, 
      GetType()); 
    } 
} 
Questions connexes