我使用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?
答案 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]");