2009-10-12 48 views
0

我有一个很简单的问题,我只是不知道。如何获得谓词的主体?

方法的代码很简单:

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()); 
} 

的问题是,我想将更多的信息到错误消息。从表达式中获取信息很容易。但是我怎样才能达到谓词的“用户友好”字符串表示呢?

回答

2

你不得不承认,作为一个表达式树太:

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()); 
    } 
}