Spring表达式和可空值

时间:2013-03-12 13:48:33

标签: c# .net spring.net

我使用Spring.Core dll ExpressionEvaluator

我的简单代码:

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

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

引发以下异常:

  

具有指定数量和类型的参数的方法GetValueOrDefault不存在。

Finance是一个简单的poco,SomeNullableFinanceField字段的类型为decimal?

1 个答案:

答案 0 :(得分:1)

Spring.net ExpressionEvaluator不了解.net Nullable类型,因此它不会尝试查找和调用GetValueOrDefault方法,因为SomeNullableFinanceField为null。

如果SomeNullableFinanceField不为null,它会尝试在SomeNullableFinanceField值(十进制)上调用GetValueOrDefault。

你应该修改你的表达:

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

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