2009-10-12 3 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()); 
    } 
} 
관련 문제