File tree Expand file tree Collapse file tree 2 files changed +39
-2
lines changed
NHibernate.Test/Criteria/Lambda Expand file tree Collapse file tree 2 files changed +39
-2
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,36 @@ public void StaticPropertyInstanceMethodCall()
4242
4343 Assert . AreEqual ( expected , actual ) ;
4444 }
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+ }
4575
4676 [ Test ]
4777 public void StaticPropertyInstanceMultipleMethodCall ( )
Original file line number Diff line number Diff line change @@ -261,18 +261,25 @@ public static object FindValue(Expression expression)
261261 return constantExpression . Value ;
262262 case ExpressionType . MemberAccess :
263263 var memberExpression = ( MemberExpression ) expression ;
264+ var instance = findValue ( memberExpression . Expression ) ;
265+ if ( instance == null && memberExpression . Expression != null )
266+ break ;
267+
264268 switch ( memberExpression . Member . MemberType )
265269 {
266270 case MemberTypes . Field :
267- return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
271+ return ( ( FieldInfo ) memberExpression . Member ) . GetValue ( instance ) ;
268272 case MemberTypes . Property :
269- return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( findValue ( memberExpression . Expression ) ) ;
273+ return ( ( PropertyInfo ) memberExpression . Member ) . GetValue ( instance ) ;
270274 }
271275 break ;
272276 case ExpressionType . Call :
273277 var methodCallExpression = ( MethodCallExpression ) expression ;
274278 var args = methodCallExpression . Arguments . ToArray ( arg => FindValue ( arg ) ) ;
275279 var callingObject = findValue ( methodCallExpression . Object ) ;
280+ if ( callingObject == null && methodCallExpression . Object != null )
281+ break ;
282+
276283 return methodCallExpression . Method . Invoke ( callingObject , args ) ;
277284 case ExpressionType . Convert :
278285 var unaryExpression = ( UnaryExpression ) expression ;
You can’t perform that action at this time.
0 commit comments