File tree 2 files changed +39
-2
lines changed
NHibernate.Test/Criteria/Lambda
2 files changed +39
-2
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,36 @@ public void StaticPropertyInstanceMethodCall()
42
42
43
43
Assert . AreEqual ( expected , actual ) ;
44
44
}
45
+
46
+ [ Test ]
47
+ public void NullableNullHasValue ( )
48
+ {
49
+ int ? v = null ;
50
+ var actual = GetValue ( ( ) => v . HasValue ) ;
51
+ var expected = v . HasValue ;
52
+
53
+ Assert . AreEqual ( expected , actual ) ;
54
+ }
55
+
56
+ [ Test ]
57
+ public void NullableNullGetValueOrDefault ( )
58
+ {
59
+ int ? v = null ;
60
+ var actual = GetValue ( ( ) => v . GetValueOrDefault ( ) ) ;
61
+ var expected = v . GetValueOrDefault ( ) ;
62
+
63
+ Assert . AreEqual ( expected , actual ) ;
64
+ }
65
+
66
+ [ Test ]
67
+ public void NullableNullValue ( )
68
+ {
69
+ int ? v = null ;
70
+ Expression < Func < int > > expression = ( ) => v . Value ;
71
+
72
+ Assert . Throws < InvalidOperationException > ( ( ) => GetValue ( expression ) ) ;
73
+ Assert . Throws < InvalidOperationException > ( ( ) => expression . Compile ( ) . Invoke ( ) ) ;
74
+ }
45
75
46
76
[ Test ]
47
77
public void StaticPropertyInstanceMultipleMethodCall ( )
Original file line number Diff line number Diff line change @@ -261,18 +261,25 @@ public static object FindValue(Expression expression)
261
261
return constantExpression . Value ;
262
262
case ExpressionType . MemberAccess :
263
263
var memberExpression = ( MemberExpression ) expression ;
264
+ var instance = findValue ( memberExpression . Expression ) ;
265
+ if ( instance == null && memberExpression . Expression != null )
266
+ break ;
267
+
264
268
switch ( memberExpression . Member . MemberType )
265
269
{
266
270
case MemberTypes . Field :
267
- return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
271
+ return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( instance ) ;
268
272
case MemberTypes . Property :
269
- return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
273
+ return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( instance ) ;
270
274
}
271
275
break ;
272
276
case ExpressionType . Call :
273
277
var methodCallExpression = ( MethodCallExpression ) expression ;
274
278
var args = methodCallExpression . Arguments . ToArray ( arg => FindValue ( arg ) ) ;
275
279
var callingObject = findValue ( methodCallExpression . Object ) ;
280
+ if ( callingObject == null && methodCallExpression . Object != null )
281
+ break ;
282
+
276
283
return methodCallExpression . Method . Invoke ( callingObject , args ) ;
277
284
case ExpressionType . Convert :
278
285
var unaryExpression = ( UnaryExpression ) expression ;
You can’t perform that action at this time.
0 commit comments