2013-03-12 2 views
1

저는 Spring.Core dll을 ExpressionEvaluator과 함께 사용합니다.스프링 표현식과 nullable 값

내 간단한 코드 : 존재하지 않는 인수의 지정된 수와 유형

방법 GetValueOrDefault :

public void ComputedFields() 
{ 
    var finance = new Finance(); 
    ExpressionEvaluator 
    .SetValue(
     finance, 
     "FieldToBeSet", 
     ExpressionEvaluator 
     .GetValue(
      finance, 
      "SomeNullableFinanceField.GetValueOrDefault(1)")); 

    Assert.AreEqual(finance.FieldToBeSet, 1); 
} 

는 다음과 같은 예외를 발생시킵니다.

Finance

SomeNullableFinanceField 필드가 decimal?

답변

1

Spring.net ExpressionEvaluator는 .NET nullable 형식에 대해 알고하지 않는 타입이다 간단한 마시고, 그래서 찾아의 때문에 GetValueOrDefault 메소드를 호출하려고하지 않습니다 SomeNullableFinanceField는 null입니다.

SomeNullableFinanceField가 null이 아닌 경우 SomeNullableFinanceField 값 (10 진수)에서 GetValueOrDefault를 호출하려고 시도합니다.

당신은 당신에게 표현 수정해야

:

ExpressionEvaluator 
    .GetValue(
     finance, 
     "SomeNullableFinanceField != null ? SomeNullableFinanceField : 1"); 

또는

ExpressionEvaluator 
    .GetValue(
     finance, 
     "{SomeNullableFinanceField, 1}.nonNull()[0]");