1

我将 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是一个简单的 pocoSomeNullableFinanceField字段的类型decimal?

4

1 回答 1

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]");
于 2013-03-15T15:41:12.097 回答